谢谢大神们的回答,豁然开朗,简单总结下:对于那些在编译时就能确定的字面量都会存放在运行时常量池中,比如:
String c = "hello " + "world"; //JVM会将此代码优化为String c = "hello world";
String d = "hello world";
而如下代码
String b = a + "world";
其中a是变量,在编译时不能确定值,所以不会被放在运行时常量池中,而是在heap中重新new了一块儿内存。
谢谢大神们的回答,豁然开朗,简单总结下:对于那些在编译时就能确定的字面量都会存放在运行时常量池中,比如:
String c = "hello " + "world"; //JVM会将此代码优化为String c = "hello world";
String d = "hello world";
而如下代码
String b = a + "world";
其中a是变量,在编译时不能确定值,所以不会被放在运行时常量池中,而是在heap中重新new了一块儿内存。