Strings1=newString("aa")+newString("bb");s1.intern();Strings2="aabb";System.out.println(s1==s2);//true我已经了解,JDK6中intern()会在常量池中不存在的情况下直接拷贝值放入常量池,而JDK7是会把堆中的引用放入常量池。这段代码中的字面量"aa""bb""aabb"在编译器就已经放入常量池中了,很多文章都说成执行到Strings2="aabb"才把“aabb”放入常量池,我认为是不对的。所以在s1.intern()这个操作应该是没有产生任何副作用的,s1仍然指向堆中的一个对象,s2仍然指向常量池中的一个对象。但实际结果却为true,而且把Strings2="aabb"移动到s1.intern()前面,结果就是我所预期的false。到底是为什么呢?
MMTTMM
POPMUISE
相关分类