欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文搞懂String的intern()方法

 更新時(shí)間:2023年06月02日 10:16:57   作者:一一哥Sun  
這篇文章主要給大家介紹String的intern()方法,文中有詳細(xì)的代碼示例,感興趣的小伙伴讓我們一起來(lái)看看這究竟是個(gè)什么玩意

一. 先來(lái)一段代碼

我們先上一段代碼:

String str1 = new StringBuilder("你好").append("renr").toString();
String str2 = "你好renr";
System.out.println(str3 == str4);

大家猜猜上面代碼的輸出結(jié)果是什么?true還是false?

321,你猜對(duì)了嗎?

這里的輸出結(jié)果是:false!

二. String的intern()方法詳解

上面的結(jié)果是為什么呢?為了搞清楚這個(gè)問(wèn)題,我們看看需要了解一下intern()方法的內(nèi)部原理。其實(shí)大家可以將String的intern()方法 , 理解為 個(gè)可以 手動(dòng)將字符串加入常量池中的方法。

在上述代碼中,我們知道 "=="比較的是對(duì)象的地址, 輸出 結(jié)果為 false, 這就 說(shuō)明str1和str2的地址不同。而str 2 引用的字符串"你好renr"肯定是放在常量池中的,這就說(shuō)明str1引用的字符串不在常量池中,而是在堆中。 對(duì)于上述現(xiàn)象,我們可以按照下圖所示進(jìn)行理解:

三. 修改代碼后再看結(jié)果

我們可以對(duì)上述代碼進(jìn)行修改,接著再來(lái)看一下執(zhí)行結(jié)果,代碼如下:

String str3 = new StringBuilder("你好").append("renr").toString();
System.out.println(str3.intern() == str3);
String str4 = "你好renr";
System.out.println(str3 == str4);

現(xiàn)在你再來(lái)猜一下上面代碼的輸出結(jié)果,會(huì)分別輸出什么?

321,我們來(lái)公布結(jié)果,這次輸出的結(jié)果為:

true true

來(lái)來(lái)來(lái),再來(lái)給你解釋一下:

執(zhí)行str3.intern()后,str3==str4返回true,這就說(shuō)明str3和str4引用了同一對(duì)象 地址 。

上面我們提到,new StringBuilder("你好").append("renr").toString()得到的字符串存放在堆中,執(zhí)行str3.intern()后,會(huì)將str3的對(duì)象引用放入 常量池中 ( jdk1.7后 ) 。

而對(duì)str4進(jìn)行賦值時(shí),發(fā)現(xiàn)常量池中已經(jīng)有了該字符串的引用,則 會(huì) 將該引用值直接賦值給str4, 所以 str4也指向 str3的對(duì)象 ,故 最后輸出 結(jié)果為 true !

四. 總結(jié)

通過(guò)對(duì)上面代碼的解釋?zhuān)F(xiàn)在你搞懂了intern()方法的執(zhí)行原理了嗎?現(xiàn)在請(qǐng)你要記得,intern()的作用就是就是直接將字符串添加到常量池!好了,本篇到此為止。

以上就是一文搞懂String的intern()方法的詳細(xì)內(nèi)容,更多關(guān)于String intern()方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論