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。到底是為什么呢?
JDK7中String.Intern()方法的疑問
HUWWW
2019-09-19 13:25:29