20 Stimmen

Wie viele Java-String-Objekte werden im Code String s="abc"+"xyz"; erstellt?

Wie viele Java-String-Objekte werden im folgenden Statement erstellt?

String s = "abc" + "xyz"; 

Ich schätze drei?

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)

23voto

Bohemian Punkte 386825

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 Stimmen

+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.

2 Stimmen

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.

1 Stimmen

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.

9voto

Nayuki Punkte 17101

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].

Referenzen

[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

-3voto

Prashant kumar Punkte 1

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.com

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.

Powered by:

X