Strings1=newString("aa")+newString("bb");s1.intern();Strings2="aabb";System.out.println(s1==s2);//true我已經(jīng)了解,JDK6中intern()會(huì)在常量池中不存在的情況下直接拷貝值放入常量池,而JDK7是會(huì)把堆中的引用放入常量池。這段代碼中的字面量"aa""bb""aabb"在編譯器就已經(jīng)放入常量池中了,很多文章都說成執(zhí)行到Strings2="aabb"才把“aabb”放入常量池,我認(rèn)為是不對(duì)的。所以在s1.intern()這個(gè)操作應(yīng)該是沒有產(chǎn)生任何副作用的,s1仍然指向堆中的一個(gè)對(duì)象,s2仍然指向常量池中的一個(gè)對(duì)象。但實(shí)際結(jié)果卻為true,而且把Strings2="aabb"移動(dòng)到s1.intern()前面,結(jié)果就是我所預(yù)期的false。到底是為什么呢?
JDK7中String.Intern()方法的疑問
尚方寶劍之說
2019-09-13 10:37:24