一文搞懂String的intern()方法
一. 先來一段代碼
我們先上一段代碼:
String str1 = new StringBuilder("你好").append("renr").toString();
String str2 = "你好renr";
System.out.println(str3 == str4);大家猜猜上面代碼的輸出結(jié)果是什么?true還是false?
321,你猜對了嗎?
這里的輸出結(jié)果是:false!
二. String的intern()方法詳解
上面的結(jié)果是為什么呢?為了搞清楚這個問題,我們看看需要了解一下intern()方法的內(nèi)部原理。其實大家可以將String的intern()方法 , 理解為 是 一 個可以 手動將字符串加入常量池中的方法。
在上述代碼中,我們知道 "=="比較的是對象的地址, 而 輸出 結(jié)果為 false, 這就 說明str1和str2的地址不同。而str 2 引用的字符串"你好renr"肯定是放在常量池中的,這就說明str1引用的字符串不在常量池中,而是在堆中。 對于上述現(xiàn)象,我們可以按照下圖所示進行理解:

三. 修改代碼后再看結(jié)果
我們可以對上述代碼進行修改,接著再來看一下執(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)在你再來猜一下上面代碼的輸出結(jié)果,會分別輸出什么?
321,我們來公布結(jié)果,這次輸出的結(jié)果為:
true true
來來來,再來給你解釋一下:
執(zhí)行str3.intern()后,str3==str4返回true,這就說明str3和str4引用了同一對象 地址 。
上面我們提到,new StringBuilder("你好").append("renr").toString()得到的字符串存放在堆中,執(zhí)行str3.intern()后,會將str3的對象引用放入 到 常量池中 ( jdk1.7后 ) 。
而對str4進行賦值時,發(fā)現(xiàn)常量池中已經(jīng)有了該字符串的引用,則 會 將該引用值直接賦值給str4, 所以 str4也指向 了 str3的對象 ,故 最后輸出 結(jié)果為 true !

四. 總結(jié)
通過對上面代碼的解釋,現(xiàn)在你搞懂了intern()方法的執(zhí)行原理了嗎?現(xiàn)在請你要記得,intern()的作用就是就是直接將字符串添加到常量池!好了,本篇到此為止。
以上就是一文搞懂String的intern()方法的詳細內(nèi)容,更多關(guān)于String intern()方法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springboot與vue實現(xiàn)簡單的CURD過程詳析
這篇文章主要介紹了springboot與vue實現(xiàn)簡單的CURD過程詳析,圍繞springboot與vue的相關(guān)資料展開實現(xiàn)CURD過程的過程介紹,需要的小伙伴可以參考一下2022-01-01
深度解析Spring Security 中的 SecurityFilterChain核心功
SecurityFilterChain通過組件化配置、類型安全路徑匹配、多鏈協(xié)同三大特性,重構(gòu)了Spring Security的配置范式,接下來通過本文給大家介紹Spring Security中的SecurityFilterChain核心功能,感興趣的朋友一起看看吧2025-08-08
Spring + Mybatis 項目實現(xiàn)動態(tài)切換數(shù)據(jù)源實例詳解
這篇文章主要介紹了Spring + Mybatis 項目實現(xiàn)動態(tài)切換數(shù)據(jù)源的相關(guān)資料,需要的朋友參考下吧2017-04-04
SpringBoot與MyBatis-Plus的高效集成方式
本文詳細介紹了如何在SpringBoot項目中整合MyBatis-Plus,包括環(huán)境準(zhǔn)備、實體類與Mapper接口定義、CRUD操作、條件構(gòu)造器、事務(wù)管理、安全性考慮、性能優(yōu)化、版本兼容性與遷移、實際應(yīng)用場景和監(jiān)控與日志等內(nèi)容,通過這些步驟,讀者可以掌握MyBatis-Plus的高級特性和最佳實踐2024-11-11
Java static(靜態(tài)變量)和私有化功能與用法分析
這篇文章主要介紹了Java static(靜態(tài)變量)和私有化功能與用法,結(jié)合具體實例形式分析了Java static(靜態(tài)變量)和私有化的相關(guān)概念、原理、使用方法及操作注意事項,需要的朋友可以參考下2019-07-07

