Strings1=newString("aa")+newString("bb");s1.intern();Strings2="aabb";System.out.println(s1==s2);//true我已經(jīng)了解,JDK6中intern()會在常量池中不存在的情況下直接拷貝值放入常量池,而JDK7是會把堆中的引用放入常量池。這段代碼中的字面量"aa""bb""aabb"在編譯器就已經(jīng)放入常量池中了,很多文章都說成執(zhí)行到Strings2="aabb"才把“aabb”放入常量池,我認為是不對的。所以在s1.intern()這個操作應該是沒有產生任何副作用的,s1仍然指向堆中的一個對象,s2仍然指向常量池中的一個對象。但實際結果卻為true,而且把Strings2="aabb"移動到s1.intern()前面,結果就是我所預期的false。到底是為什么呢?
有沒有童鞋遇到過同樣的問題:JDK7中String.Intern()方法的疑問
元芳怎么了
2019-09-08 21:16:59