Java字符串内存地址
String ss1="a"+"bc";
String ss2="abc";
System.out.println(ss1==ss2);//true
ss1=ss1+"def";
ss2="abc"+"def";
System.out.println(ss1==ss2);//false---为什么?
------解决方案--------------------不懂啊 等待大牛日经
------解决方案--------------------貌似是ss1=ss1+"def";这行等号右面有变量的缘故。。。
------解决方案--------------------确实有点日经。
String的享元模式,在编译时能立即确定的常量,才能比较好的发挥效用。而且目前这个效果已经是编译器优化后的了;没记错的话,老早以前的Java,第一条也没法true。
ss1=ss1+"def"; 运行时才知道ss1的内容,编译器还没那么聪明可以推断出ss1到这里的时候能是个啥。
------解决方案--------------------编译期能确定相同的字符串才会指向常量池中同一个字符串
什么样的编译期就能确定呢?
那就是由常量来初始化的字符串
ss1=ss1+"def";
右侧有变量,所以编译期不能确定
不过再次强调,不需要研究和专这种问题
java 对此的实现有过改变,难保以后不改
搞清楚这个问题没有任何意义
------解决方案--------------------
就怕面试问这样的问题。。
------解决方案--------------------关键是要弄懂==的含义。
==和equal不要用错了
------解决方案--------------------编译期能确定相同的字符串才会指向常量池中同一个字符串
------解决方案--------------------编译期能确定相同的字符串才会指向常量池中同一个字符串
学习