如何以编程方式证明String s = new String(" abc")添加文字String" abc"到字符串池

时间:2014-08-19 03:28:59

标签: java string

我被问到这个问题:在

String s=new String("abc");

如何以编程方式证明String literal" abc"将被添加到字符串池?

PS:我知道JLS说 - 所有字符串文字(""之间的字符串)被添加到字符串池

另外,我查看了生成的字节代码,但是在字节代码中,我只能看到类常量池而不是字符串常量池

1 个答案:

答案 0 :(得分:3)

您可以使用

s != s.intern()

产生true

说明:在调用"abc"之前,假设s.intern()不在字符串池中。然后s.intern()会将s添加到字符串池中,并且两边都相等(引用相等==)。


E.g。这会打印false

String s2 = "x".concat("yz"); // "xyz" is not in the string pool, since it's calculated using a method
System.out.println(s2 != s2.intern());

由于双方不相等,"abc"在调用intern()之前在字符串池中,这证明了索赔。 (reductio ad impossibilem


注意:如果您使用String s = "abc";直接指定字符串文字,则此方法无效。但是,在这种情况下,您仍然可以使用new String(s)创建一个新字符串,并使用新字符串。