日期:2014-05-20  浏览次数:20713 次

System.out.println("123" == "12" + "3");为什么结果是true
如果你觉得简单,就当放松一下吧

------解决方案--------------------
首先,在常量池两面创建了123,后面的12+3的结果也是常量,这两个的字面量相等,他们在常量池里面是一个对象
------解决方案--------------------
编译期优化

1 最终编译出来的代码,是System.out.println("123" == "123"); 没有单独的"12"和"3"。凡是编译期能够100%确定的string加号拼接,都会直接编译为拼接结果,不保留拼接过程。
2 如1F提到的常量池优化,编译器将相同的常量字符串池化了。