2014-02-28 72 views
0

如果字符串池中包含兩個字符串string1string2引用字符串文字,將System.out.println(string1 + string2)生成字符串池中的附加字符串對象爲string3=string1+string2;?如果不是,爲什麼?是否有爲S.O.P創建的新字符串對象?

爲了更清楚地添加在這種情況下在池中分配了多少個對象?

+0

[此問題]可能的重複(http://stackoverflow.com/questions/11989261/does-concatenating-strings-in-java-always-lead-to-new-strings-being-created-in-m ) –

回答

2

表達

"string1" + "string2" 

將導致字符串常量

"string1string2" 

創建編譯時間,並加入到封閉類的常量池。

表達

string1 + string2 

其中string1string2是任意String -typed變量將編譯成連接兩個字符串的可執行代碼。結果不會被提交給池。

+0

和System.out.print(string1 +「string3」+ string2)呢? – Prashant

+0

整個表達式必須是編譯時常量。兩個變量之間的一個字面意義不大。 –