確切的規則是在Java語言規範拼寫,§5.1.11. String Conversion
根據這些規則,"str" + bool
相當於:
"str" + new Boolean(bool).toString()
這就是說,允許編譯器相當大的餘地究竟怎麼了評估整體表達。來自JLS §15.18.1. String Concatenation Operator +:
一個實現可能選擇在一個步驟中執行轉換和連接以避免創建並丟棄中間String對象。爲了提高重複字符串連接的性能,Java編譯器可以使用類或類似技術來減少通過評估表達式創建的中間對象的數量。
對於基元類型,實現還可以通過直接從基元類型轉換爲字符串來優化封裝器對象的創建。
例如,我的編譯如下:
boolean bool = true;
System.out.println("the value of bool is : " + bool);
完全等同於:
boolean bool = true;
System.out.println(new StringBuilder("the value of bool is : ").append(bool).toString());
他們導致相同的字節碼:
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
來源
2012-12-15 18:28:23
NPE
閱讀本文:http://www.znetdevelopment.com/blogs/2009/04/06/java-string-concatenation/ –