Die genauen Regeln werden in der Java Language Specification buchstabiert, §5.1.11. String Conversion
diese Regeln nach, ist "str" + bool
entspricht:
"str" + new Boolean(bool).toString()
Das heißt, der Compiler einen großen Spielraum, wie genau erlaubt ist Der Gesamtausdruck wird ausgewertet. Von JLS §15.18.1. String Concatenation Operator +:
Eine Implementierung in einem Schritt Umwandlung und Verkettung durchführen zu vermeiden erstellen und dann Verwerfen ein Zwischen String-Objekt kann wählen. Um die Leistung der wiederholten Verkettung von Strings zu erhöhen, können ein Java-Compiler die StringBuffer
Klasse oder eine ähnliche Technik verwendet werden, um die Anzahl von Zwischen String
Objekten zu reduzieren, die durch Auswertung eines Ausdrucks erzeugt werden.
Für primitive Typen kann eine Implementierung auch die Schaffung eines Wrapper-Objekt optimieren entfernt in einen String direkt von einem primitiven Typ umwandeln.
Zum Beispiel mit meinem Compiler der folgenden:
boolean bool = true;
System.out.println("the value of bool is : " + bool);
genau entspricht:
boolean bool = true;
System.out.println(new StringBuilder("the value of bool is : ").append(bool).toString());
Sie in identischen Bytecode führen:
Code:
0: iconst_1
1: istore_1
2: getstatic #59 // Field java/lang/System.out:Ljava/io/PrintStream;
5: new #166 // class java/lang/StringBuilder
8: dup
9: ldc #168 // String the value of bool is :
11: invokespecial #170 // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
14: iload_1
15: invokevirtual #172 // Method java/lang/StringBuilder.append:(Z)Ljava/lang/StringBuilder;
18: invokevirtual #176 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
21: invokevirtual #69 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
24: return
Lesen Sie diesen Artikel: http://www.znetdevelopment.com/blogs/2009/04/06/java-string-concatenation/ –