什么时候一些字符串不是通过java中的字符串常量池创建的?

时间:2015-03-27 06:04:22

标签: java string

我想澄清一个疑问

当我们通过new运算符

创建一个字符串时
String s=new String("jk");

jk进入String常量池和堆

现在看

String s1=s+"winter"; 
 //case1

String s1="jk"+new String("winter");

两种情况下的冬天都会转到String Const池吗?

我如何检查?

2 个答案:

答案 0 :(得分:2)

是。在这两种情况下,"winter"都将进入String常量池。 JLS指定""之间的任何内容都被视为编译时常量并进入字符串常量池。

注意:new String("winter") - >是多余的,几乎总是被认为是邪恶的

答案 1 :(得分:1)

只有"abc"之类的字符串常量,或编译器在编译时可以评估的表达式,如"abc" + "def",或者调用intern()的字符串进入常量池。< / p>

在运行时评估的表达式产生的字符串只是常规对象。