Wie viele Java-String-Objekte werden im folgenden Statement erstellt?
String s = "abc" + "xyz";
Ich schätze drei?
Wie viele Java-String-Objekte werden im folgenden Statement erstellt?
String s = "abc" + "xyz";
Ich schätze drei?
Der Compiler erstellt pro JVM-Start 1 String, da er den resultierenden String zur Compile-Zeit bestimmen kann, wird er interned und statisch im String-Table des JVM gespeichert.
Zur Info, wenn die Anweisung Variablen konkatenieren würde (nicht zur Laufzeit bestimmbar), würde 1 String erstellt, aber es würde auch ein StringBuilder
erstellt. Der Code würde kompilieren zu:
new StringBuilder().append(abcVar).append(xyzVar).toString()
+1 für eine so nützliche Antwort. Können Sie bitte erklären "es erstellt einen StringBuilder" oder eine Quelle angeben, damit ich es im Detail lesen kann? Es scheint mir interessant.
Wenn ich das Ergebnis der Klassendatei dekompiliere, die aus dem Code im Originalbeispiel erzeugt wurde, bekomme ich: String a = "abcdef"; Ich vermute, mein Compiler hat sich einen Shortcut genommen.
Bitte beachten Sie, dass die Compiler-Verknüpfungen nicht gelten / nicht gleich sind, wenn eine der Zeichenfolgen, die Sie anhängen, eine Variable anstelle eines Literals ist.
Die Antwort ist ein globales String-Objekt pro Programmablauf und null neue String-Objekte pro Anweisungsausführung. Dies liegt daran, dass die Java Language Specification besagt, dass der Ausdruck "abc" + "xyz"
eine Kompilierungszeitkonstante ist [0] und dass kein neues String-Objekt erstellt wird, wenn die Anweisung ausgeführt wird [1].
[0]: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#5313
Beispiele für Konstanten-Ausdrücke:
"Die ganze Zahl " + Long.MAX_VALUE + " ist richtig groß."
[1]: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.18.1
Wenn nur ein Operand-Ausdruck vom Typ String ist, wird zur Laufzeit eine Zeichenkettenkonvertierung mit dem anderen Operanden durchgeführt, um eine Zeichenkette zu erzeugen. Das Ergebnis ist eine Referenz auf ein String-Objekt (neu erstellt, es sei denn, der Ausdruck ist ein Kompilierzeitkonstantenausdruck (§15.28)), der die Verkettung der
Es gibt drei Möglichkeiten, Zeichenketten in Java zu erstellen
1) Wir können eine Zeichenkette einfach erstellen, indem wir einer Variablen vom Typ Zeichenkette eine Gruppe von Zeichen zuweisen
z.B.:
String s; //deklariert eine Variable vom Typ String,
s="hello"; //weist ihr eine Gruppe von Zeichen zu
2) Wir können ein Objekt zu einer Zeichenkette erstellen, indem wir Speicher mit dem new-Operator zuweisen. Dies ist ähnlich wie das Erstellen eines Objekts einer beliebigen Klasse.
z.B.: String s = new String("Hallo");
3) Eine weitere Möglichkeit, Zeichenketten zu erstellen, besteht darin, Zeichenfelder in Zeichenketten umzuwandeln.
z.B.: char arr[] = {'p','r','a','s','h','a','n','t'};
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Zusätzlich zur Antwort siehe auch: stackoverflow.com/questions/1842024/…
4 Stimmen
@Deep - bitte akzeptieren Sie meine Antwort - klicken Sie auf das leere Häkchen-Symbol neben der Antwort (das heißt, wenn Sie denken, dass es korrekt ist - viele andere scheinen das zu tun)