2012-04-13 8 views
4

Ich bin keineswegs ein Java-Programmierer, also mag dies ziemlich einfach scheinen.Java mehrzeilige Zeichenfolge Bildung

Welche von diesen sind "besser", wenn Sie Ihre Codezeilen kurz halten wollen.

String str = "First part of a string."; 
str += " Second part of string."; 

oder

String str = "First part of string." + 
" Second part of string." 

Ich denke, meine Frage ist beides tun, um das + = und + macht ein neues String-Objekt? Wenn sie es dann auch nicht wirklich besser machen, wäre es nur eine Frage der Präferenz. Das Beispiel, das ich gab, wäre ein gutes Beispiel für den realen Einsatz. Ich möchte nicht einen Vergleich der Durchführung einer Verkettung 3 mal bis 1000 mal mit beiden Methoden.

Danke

+2

Ich kann nicht für die tatsächliche Umsetzung sprechen, aber es scheint mir, wie der zweite es recht einfach machen würde, die Verkettung weg zu optimieren, und man denke nur an beide Teile der Zeichenfolge ein einzelnes Literal. – jpm

+0

Awesome Jungs, danke! Ich bin ein Ruby-Entwickler und die Verwendung << concat zwei Strings erstellt kein neues Objekt, ändert nur die, die Sie hinzugefügt haben. Also habe ich mich gefragt, wie Java das ähnliche Problem behandelte. – Luke

+2

Für den allgemeinen Aufbau von Strings (wenn Sie viele Strings verketten müssen), ist StringBuilder ein großartiges Werkzeug, um die Kosten der rohen Verkettung zu vermeiden. – jpm

Antwort

3

Ich bevorzuge die 2. Methode. Der Grund ist, dass der Compiler das Ergebnis der Verkettung wahrscheinlich in einer einzigen Zeichenfolge zur Kompilierungszeit kombiniert, während die erste Methode zur Laufzeit ausgeführt werden kann (abhängig von der tatsächlichen Implementierung). Es ist eine kleine Sache, es sei denn, Sie tun etwas Millionen von Malen jedoch.

+0

Wird * definitiv * das Ergebnis der Verkettung zur Kompilierungszeit kombinieren. Dies ist ein erforderliches Verhalten. – EJP

0

Hier ist, was ich bekomme, wenn ich kompilieren dann decompile dies:

public static void main(String[] args) { 
    String str = "First"; 
    str += " Second"; 
    System.out.println(str); 

    String str2 = "First" + " Second"; 
    System.out.println(str2); 
} 

Becomes:

public static void main(String args[]) { 
    String s = "First"; 
    s = (new StringBuilder()).append(s).append(" Second").toString(); 
    System.out.println(s); 
    String s1 = "First Second"; 
    System.out.println(s1); 
} 

So ist die zweite Methode besser ist.

2

Der Java-Compiler ist tatsächlich erforderlich, um das zweite Beispiel zur Kompilierzeit zu verketten. Siehe 15.28. Constant Expressions und 3.10.5. String Literals.

+0

Der * Compiler * muss zum Kompilieren verkettet werden. Noch nichts mit der JVM zu tun. – EJP

0
StringBuilder sb = new StringBuilder(); 
sb.append("First part"); 
sb.append("Second part"); 
System.out.print(sb.toString()); 
Verwandte Themen