我试了以下代码.
String aa="a"+"c";
String a1=aa+"c";
String bb="a"+"c";
String b1=bb+"c";
//aa.concat("c");
//bb.concat("c");
String cc="ac";
String dd="a"+"c";
System.out.println(aa.hashCode());
System.out.println(bb.hashCode());
System.out.println(aa.equals(bb));
System.out.println(a1==b1);
System.out.println(cc==dd);
对于JVM编译期运行期不是很懂,我从以下方面分析.
起初考虑到是不是JDK1.5的自动装箱的原因,试了下不是这个原因.
分析以上得出个人理解."a"+"c";的值肯定指向同一个推内存地址.把这个地址指向aa和bb.因为aa和bb指向的是同一个地址所以相等.
综合以上的代码分析问题出在aa+"c";和bb+"c"中.我认为是一个变量的引用加上一个实例对象.得到的就是不同对象.这个解释自己理解的可能有点牵强.
看了这问题也有点模糊了,大家都来发表意见,那位朋友能给出合理的解释... |