Java字符串池对象创建

时间:2011-08-22 06:58:30

标签: java string

我怀疑我的概念在字符串池中是否清晰。请研究以下一组代码,并检查我的答案在以下一组陈述后创建的对象数量是否正确: -

1)

String s1 = "abc";
String s2 = "def";
s2 + "xyz";

2)

 String s1 = "abc";
 String s2 = "def";
 s2 = s2 + "xyz";

3)

String s1 = "abc";
String s2 = "def";
String s3 = s2 + "xyz";

4)

String s1 = "abc";
String s2 = "def";
s2 + "xyz";
String s3 = "defxyz";

根据我所知的概念,在上述所有4个案例中,在执行每组行后将会创建4个对象。

2 个答案:

答案 0 :(得分:7)

您不能单独使用s2 + "xyz"这样的表达式。编译器仅评估常量,并且只将字符串常量自动添加到字符串文字池中。

e.g。

final String s1 = "abc"; // string literal
String s2 = "abc"; // same string literal

String s3 = s1 + "xyz"; // constants evaluated by the compiler 
                        // and turned into "abcxyz"

String s4 = s2 + "xyz"; // s2 is not a constant and this will
                        // be evaluated at runtime. not in the literal pool.
assert s1 == s2;
assert s3 != s4; // different strings.

答案 1 :(得分:1)

为什么要关心?其中一些取决于编译器优化的积极程度,因此没有实际的正确答案。