1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          intern(Java之Intern詳解)

          來源:互聯網轉載 時間:2024-05-12 05:20:58

          “哥,你發給我的那篇文章我看了,結果直接把我給看得不想學 Java 了!”三妹氣沖沖地說。

          “哪一篇啊?”看著三妹面色沉重,我關心地問到。

          “就是美團技術團隊深入解析 String.intern() 那篇啊!”三妹回答。

          https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html

          “哦,我想起來了,不挺好一篇文章嘛,深入淺出,精品中的精品,看完后你應該對 String 的 intern 徹底理解了才對呀?!?/p>

          “好是好,但我就是看不懂!”三妹委屈地說,“哥,還是你親自給我講講吧?”

          “好吧,上次學的字符串常量池你都搞清楚了吧?”

          “嗯?!比梦⑽⒌狞c了點頭。

          要理解美團技術團隊的這篇文章,你只需要記住這幾點內容:

          第一,使用雙引號聲明的字符串對象會保存在字符串常量池中。

          第二,使用 new 關鍵字創建的字符串對象會先從字符串常量池中找,如果沒找到就創建一個,然后再在堆中創建字符串對象;如果找到了,就直接在堆中創建字符串對象。

          第三,針對沒有使用雙引號聲明的字符串對象來說,就像下面代碼中的 s1 那樣:

          Strings1=newString("二哥")+newString("三妹");

          如果想把 s1 的內容也放入字符串常量池的話,可以調用 intern() 方法來完成。

          不過,需要注意的是,Java 7 的時候,字符串常量池從永久代中移動到了堆中,雖然此時永久代還沒有完全被移除。Java 8 的時候,永久代被徹底移除。

          這個變化也直接影響了 String.intern() 方法在執行時的策略,Java 7 之前,執行 String.intern() 方法的時候,不管對象在堆中是否已經創建,字符串常量池中仍然會創建一個內容完全相同的新對象;Java 7 之后呢,由于字符串常量池放在了堆中,執行 String.intern() 方法的時候,如果對象在堆中已經創建了,字符串常量池中就不需要再創建新的對象了,而是直接保存堆中對象的引用,也就節省了一部分的內存空間。

          “三妹,來猜猜這段代碼輸出的結果吧?!蔽艺f。

          Strings1=newString("二哥三妹");Strings2=s1.intern();System.out.println(s1==s2);

          “哥,這我完全猜不出啊,還是你直接解釋吧?!比谜f。

          “好吧?!?/p>

          第一行代碼,字符串常量池中會先創建一個“二哥三妹”的對象,然后堆中會再創建一個“二哥三妹”的對象,s1 引用的是堆中的對象。

          第二行代碼,對 s1 執行 intern() 方法,該方法會從字符串常量池中查找“二哥三妹”這個字符串是否存在,此時是存在的,所以 s2 引用的是字符串常量池中的對象。

          也就意味著 s1 和 s2 的引用地址是不同的,一個來自堆,一個來自字符串常量池,所以輸出的結果為 false。

          “來看一下運行結果?!蔽艺f。

          false

          “我來畫幅圖,幫助你理解下?!笨吹饺皿@訝的表情,我耐心地說。

          “這下理解了吧?”我問三妹。

          “嗯嗯,一下子就豁然開朗了!”三妹說。

          “好,我們再來看下面這段代碼?!?/p>

          Strings1=newString("二哥")+newString("三妹");Strings2=s1.intern();System.out.println(s1==s2);

          “難道也輸出 false ?”三妹有點不確定。

          “不,這段代碼會輸出 true?!蔽曳穸巳玫牟聹y。

          “為啥呀?”三妹迫切地想要知道答案。

          第一行代碼,會在字符串常量池中創建兩個對象,一個是“二哥”,一個是“三妹”,然后在堆中會創建兩個匿名對象“二哥”和“三妹”(可以暫時忽略),最后還有一個“二哥三妹”的對象,s1 引用的是堆中“二哥三妹”這個對象。

          第二行代碼,對 s1 執行 intern() 方法,該方法會從字符串常量池中查找“二哥三妹”這個對象是否存在,此時不存在的,但堆中已經存在了,所以字符串常量池中保存的是堆中這個“二哥三妹”對象的引用,也就是說,s2 和 s1 的引用地址是相同的,所以輸出的結果為 true。

          “來看一下運行結果?!蔽倚赜谐芍竦卣f。

          true

          “我再來畫幅圖,幫助你理解下?!?/p>

          “哇,我明白了!”三妹長舒一口氣,大有感慨 intern 也沒什么難理解的意味。

          不過需要注意的是,盡管 intern 可以確保所有具有相同內容的字符串共享相同的內存空間,但也不要爛用 intern,因為任何的緩存池都是有大小限制的,不能無緣無故就占用了相對稀缺的緩存空間,導致其他字符串沒有坑位可占。

          另外,字符串常量池本質上是一個固定大小的 StringTable,如果放進去的字符串過多,就會造成嚴重的哈希沖突,從而導致鏈表變長,鏈表變長也就意味著字符串常量池的性能會大幅下降,因為要一個一個找是需要花費時間的。

          “好了,三妹,關于 String 的 intern 就講到這吧,這次理解了吧?”我問。

          “哥,你真棒!”

          看到三妹一點一滴的進步,我也感到由衷的開心。

          到此,關于“Java之Intern詳解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!

          標簽:intern-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          中國銀行全球門戶網站官網是哪個中國銀行全球門戶網站其實也就是中國銀行所設立的銀行官方網站。任何一個投資者和銀行儲戶都可以通過登錄中國銀行的全球門戶網站來辦理相關的銀行業務,特別是一些常規的銀行業務,一般情況下都可以通過登錄中國銀行全球門戶網站來完成。但是有一些投資者對于中國銀行全球門戶網站并不是非常了解,接下來可以通過以下的操作來找到中國銀行的全球門戶網站。首先,如果想要進入該網站的話,需要在自己...

          在各種經濟金融報道中,經常會出現“灰犀牛事件”或“黑天鵝事件”這樣的形容,那么究竟什么是灰犀牛、黑天鵝事件?這指的是什么?讓我們來看看灰犀牛事件究竟是怎么回事,又具有哪些特點?;蚁J录鞘裁匆馑?灰犀牛事件是一種金融術語, 指的是由于在生活中太常見而導致了人們對此已經感到習慣而不自知的風險?;蚁J录聦?上不僅是非常明顯、出現概率高,而且經常被人...

          (資料圖)隨著社會越來越發達,大家都選擇在網絡上汲取相關知識內容,比如刺客信條3劇情簡介,為了更好的解答大家的問題,小編也是翻閱整理了相應內容,下面就一起來看一下吧!《刺客信條3》是法國育碧公司推出的3D動作冒險系列游戲的正統第3代作品?!洞炭托艞l3》的故事背景設定在18世紀中后期的美洲大陸。玩家將扮演名為康納的刺客,在獨立戰爭時期的美國各地展開冒險,并將親歷革命時期的各類重要事件。本作采用了新版...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>