image.png
由源碼的注釋可知intern方法返回的是這個(gè)字符串在常量池中的對(duì)象犀农。
首先區(qū)分兩種寫(xiě)法的不同
String str="abc";
String str=new ("abc");
第一種寫(xiě)法只會(huì)在常量池中生產(chǎn)一個(gè)abc字符串對(duì)象彪笼,第二種寫(xiě)法先在常量池中生成abc對(duì)象,然后在堆中生產(chǎn)一個(gè)內(nèi)容一樣的字符串對(duì)象,str引用指向的是堆中的對(duì)象。
但是intern在1.6和1.6以后的jdk有著不同的實(shí)現(xiàn)
先看1.6的image.png
str字符串由str1和str2拼接生成,因此會(huì)在堆中生成一個(gè)對(duì)象患民,常量池里沒(méi)有對(duì)應(yīng)的字符串對(duì)象,intern的時(shí)候會(huì)在常量池里再生成一個(gè)垦梆,所以false
image.png
在1.6以后的jdk版本中匹颤,調(diào)用intern方法如果常量池沒(méi)有對(duì)應(yīng)的字符串對(duì)象,不會(huì)生成一個(gè)新的托猩,而是生成一個(gè)指向堆里字符串的引用存在常量池并返回印蓖,因此true