Wenn Sie eine Zeichenfolge mit einem primitiven wie Int verknüpfen, tut es Autobox der Wert zuerst.Zeichenfolge Verkettung und Autoboxing in Java
ex.
String string = "Four" + 4;
Wie es den Wert in eine Zeichenfolge in Java konvertiert?
Wenn Sie eine Zeichenfolge mit einem primitiven wie Int verknüpfen, tut es Autobox der Wert zuerst.Zeichenfolge Verkettung und Autoboxing in Java
ex.
String string = "Four" + 4;
Wie es den Wert in eine Zeichenfolge in Java konvertiert?
Um zu sehen, was die Java-Compiler erzeugen es immer nützlich ist javap -c
zu verwenden, um die tatsächlichen Bytecode erzeugt zeigen:
Für das folgende Java-Codebeispiel:
String s1 = "Four" + 4;
int i = 4;
String s2 = "Four" + i;
die folgenden Bytecode erzeugen würde:
0: ldc #2; //String Four4
2: astore_1
3: iconst_4
4: istore_2
5: new #3; //class java/lang/StringBuilder
8: dup
9: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
12: ldc #5; //String Four
14: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
17: iload_2
18: invokevirtual #7; //Method java/lang/StringBuilder.append:(I)Ljava/lan
g/StringBuilder;
21: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/la
ng/String;
24: astore_3
25: return
Daraus können wir sehen:
"Four" + 4
, die Java-Compiler (I wurde JDK 6 mit) waren klug genug, um zu folgern, dass dies eine Konstante ist, so gibt es keinen Rechenaufwand zur Laufzeit, da die Zeichenfolge bei der Kompilierung verkettet"Four" + i
ist der entsprechende Code new StringBuilder().append("Four").append(i).toString()
Der Java-Compiler erstellt tatsächlich eine StringBuilder
und ruft die append()
Methode auf. Es kann in dem Byte-Code zu sehen:
22 invokespecial java.lang.StringBuilder(java.lang.String) [40]
...
29 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [47]
32 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [51]
Dennoch ist das Verhalten identisch mit Boxen und dann Aufruf toString()
: "Four" + new Integer(4).toString()
- was ich glaube, was die Sprache Designer im Sinne hatte.
(1) Um genau zu sein, die Compiler bereits concatting die Stringliteral und int wörtliche zu einem einzigen Stringliteral "Four4"
. Sie können es in dem Byte-Code in der folgenden Zeile in Byte-Code sehen:
0 ldc <String "Four4"> [19]
zu http://jcp.org/aboutJava/communityprocess/jsr/tiger/autoboxing.html Laut, Autoboxing auf dem Urtyp erfolgt immer dann, wenn ein Referenztyp (wie die Integer-Klasse in diesem Fall erforderlich ist,)
So wird das int in eine Integer umgewandelt, dann wird die toString() - Methode integer-Objekte aufgerufen und ihr Ergebnis wird an die vorhergehende Zeichenfolge angehängt.
Welche Sprache verwenden Sie? – skunkfrukt
Sieht aus wie Java mir – TeaOverflow
, wenn Ihr über C# sprechen, schauen Sie hier in: [string concat] [1] [1]: http: // Stackoverflow.com/questions/3398604/string-string-int-was-hinter-der-szene-c – meirrav