2014-02-28 32 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

整个表达式必须是编译时常量。两个变量之间的一个字面意义不大。 –