我想澄清一个疑问
当我们通过new运算符
创建一个字符串时String s=new String("jk");
jk进入String常量池和堆
现在看
String s1=s+"winter";
//case1
或
String s1="jk"+new String("winter");
两种情况下的冬天都会转到String Const池吗?
我如何检查?
答案 0 :(得分:2)
是。在这两种情况下,"winter"
都将进入String常量池。 JLS指定""
之间的任何内容都被视为编译时常量并进入字符串常量池。
注意:new String("winter")
- >是多余的,几乎总是被认为是邪恶的
答案 1 :(得分:1)
只有"abc"
之类的字符串常量,或编译器在编译时可以评估的表达式,如"abc" + "def"
,或者调用intern()
的字符串进入常量池。< / p>
在运行时评估的表达式产生的字符串只是常规对象。