String中的intern

注:intern在jdk1.7之后與之前版本有所改動(dòng),區(qū)別不大文章后面會提嚼酝。
先介紹下jvm內(nèi)存模型:主要是本地方法棧,虛擬機(jī)棧竟坛,堆闽巩,方法區(qū),程序計(jì)數(shù)器(版本不同時(shí)可能方法區(qū)沒了担汤,記不清1.8以后是不是取消了方法區(qū)涎跨,非本文重點(diǎn)以后修正)。

  • intern涉及到的主要是堆(存實(shí)例對象)方法區(qū)(存常量數(shù)據(jù))
    代碼中用String對象調(diào)用intern時(shí)崭歧,往往是在方法區(qū)中生成一個(gè)與堆中字符串對應(yīng)的字符串常量隅很,今后使用同一個(gè)常量時(shí)減少對堆中對象的訪問,防止該對象的引用在以后指向其他String對象率碾,導(dǎo)致獲取不一致的String值叔营。
    對一個(gè)String變量str1而言,使用已有變量str的intern賦值與直接使用"XXX"賦值會由于順序的不一致導(dǎo)致不同的結(jié)果所宰。

不寫了绒尊,發(fā)現(xiàn)怎么都不如別人總結(jié)的好。下面這個(gè)博主寫得很好了仔粥,學(xué)習(xí):
https://blog.csdn.net/soonfly/article/details/70147205
主要是弄清楚intern的使用順序婴谱,判斷常量池中是否已經(jīng)存在String對象的值。
弄清楚 -> 編譯階段:做final String的變量拼接時(shí)躯泰,不需要等到運(yùn)行期谭羔,直接編譯期就拼接完成。做String常量拼接也如是斟冕。final能夠保證代碼在初始化階段安全性口糕,這是jvm的規(guī)定,不會受到指令重排的影響磕蛇。
弄清楚 -> 若對同一個(gè)常量值進(jìn)行多次intern景描,其實(shí)都會指向同一處方法區(qū)的位置
弄清楚 -> 1.7之后,intern使用在直接常量賦值前時(shí)秀撇,方法區(qū)存放的堆中String對象的地址超棺,以后無論多少個(gè)新的String對象使用intern,其返回值都是指向最初的那個(gè)String對象的堆地址呵燕,代碼舉例說明:

public class internTest {
    public static void main(String[] args) {
        String str2 = new String("str")+new String("01");
        str2.intern();
        String str3 = new String("str") + new String("01");
        String tmp = str3.intern();
        System.out.println(str2==tmp); 
    }
}

結(jié)果輸入:true
結(jié)論:str2和tmp指向同一個(gè)位置的堆中對象棠绘。
分析:這是因?yàn)閟tr2.intern時(shí),已經(jīng)在方法區(qū)生成了"str01"的存儲位置(保存指向str2的堆地址)再扭,str3.intern()判斷方法區(qū)已有該值不能在方法區(qū)新建氧苍,共用該值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泛范,一起剝皮案震驚了整個(gè)濱河市让虐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罢荡,老刑警劉巖赡突,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異区赵,居然都是意外死亡惭缰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門笼才,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漱受,“玉大人,你說我怎么就攤上這事骡送“菪В” “怎么了秦陋?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵赃梧,是天一觀的道長。 經(jīng)常有香客問我签夭,道長昌渤,這世上最難降的妖魔是什么赴穗? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮膀息,結(jié)果婚禮上般眉,老公的妹妹穿的比我還像新娘。我一直安慰自己潜支,他們只是感情好甸赃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冗酿,像睡著了一般埠对。 火紅的嫁衣襯著肌膚如雪络断。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天项玛,我揣著相機(jī)與錄音貌笨,去河邊找鬼。 笑死襟沮,一個(gè)胖子當(dāng)著我的面吹牛锥惋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播开伏,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼膀跌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了固灵?” 一聲冷哼從身側(cè)響起捅伤,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怎虫,沒想到半個(gè)月后暑认,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡大审,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年蘸际,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徒扶。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粮彤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姜骡,到底是詐尸還是另有隱情导坟,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布圈澈,位于F島的核電站惫周,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏康栈。R本人自食惡果不足惜递递,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啥么。 院中可真熱鬧登舞,春花似錦、人聲如沸悬荣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氯迂。三九已至践叠,卻和暖如春言缤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酵熙。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工轧简, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驰坊,地道東北人匾二。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像拳芙,于是被迫代替她去往敵國和親察藐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 從網(wǎng)上復(fù)制的舟扎,看別人的比較全面分飞,自己搬過來,方便以后查找睹限。原鏈接:https://www.cnblogs.com/...
    lxtyp閱讀 1,344評論 0 9
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理譬猫,因此不免有一些不準(zhǔn)確的地方,同時(shí)不同JDK版本的...
    高廣超閱讀 15,545評論 3 83
  • 一羡疗、運(yùn)行時(shí)數(shù)據(jù)區(qū)域 Java虛擬機(jī)管理的內(nèi)存包括幾個(gè)運(yùn)行時(shí)數(shù)據(jù)內(nèi)存:方法區(qū)染服、虛擬機(jī)棧、本地方法棧叨恨、堆柳刮、程序計(jì)數(shù)器,...
    加油小杜閱讀 1,511評論 1 15
  • 其實(shí)身為畫渣的我一年也摸不了幾次筆,昨天看了有插畫師的作品送矩,看得我也心癢難耐蚕甥,所以有了這幾張圖。 不過在手機(jī)上看我...
    劉阿biu閱讀 424評論 2 2
  • 記得第一次吃黃燜雞米飯是在合肥出差栋荸,當(dāng)時(shí)很趕時(shí)間菇怀,還沒來得及細(xì)細(xì)品嘗,就開始趕路蒸其。但始終記得第一口的味道敏释,一直念念...
    王小妞61閱讀 821評論 2 17