在Java中什么時候使用String.intern()方法?

當(dāng)中的String.intern()方法可以用來處理在Java中字符串的重復(fù)問題。通過使用intern()方法,可以節(jié)省大量由重復(fù)字符串對象消耗的堆內(nèi)存。如果一個字符串對象包含與另一個字符串相同的內(nèi)容,但是占用了不同的內(nèi)存位置,例如str1!= str2但str1.equals(str2)true,則稱其為重復(fù)。由于String對象在普通Java應(yīng)用程序中消耗大量堆內(nèi)存,因此使用intern()方法減少重復(fù),也可以使用intern()方法實例化String對象并將它們存儲到String pool中以便進(jìn)一步重用。

例如,當(dāng)你創(chuàng)建一個 String literal像 “ABC” ,然后 它會自動保存在字符串池,但是當(dāng)你再創(chuàng)建一個新的String對象,如新的String(“ABC”) ,即使是相同的字符串,在一個新的對象創(chuàng)建了不同的內(nèi)存位置。這是一個重復(fù)的字符串。

通過在此對象上調(diào)用intern()方法,可以指示JVM將此放入String pool中,并且每當(dāng)其他人創(chuàng)建“abc”時,將返回此對象而不是創(chuàng)建新對象。

通過這種方式,可以在Java中節(jié)省大量內(nèi)存。

關(guān)于String.intern()方法的一些重要問題:

以下是java.lang.String類中有關(guān)intern()方法的一些重要觀點,值得記?。?/p>

1)String.intern()方法位于JDK 1.1的String類中。它返回String對象的規(guī)范表示。當(dāng)調(diào)用intern方法時,如果String pool已包含該String對象,使得equals()返回true,則它將從池返回String對象,否則它將該對象添加到唯一的String pool中。

2)在s1和s2上調(diào)用intern()方法后,s1.intern()== s2.intern(),如果是s1.equals(s2),兩者都將在池中指向相同的String常量。

3)在Java 6之前,String.intern()方法的失控使用可能會導(dǎo)致java.lang.OutOfMemory: PermGen space,因為String pool實際上位于Java堆的PermGen區(qū)域,這在許多JVM(32M到96M)中非常小并且已修復(fù)。

從Java 7開始,intern()方法變得更加有用,因為String pool被重新定位到JVM的主堆空間。

這將有助于通過使用String.intern()方法進(jìn)一步減少String重復(fù)。

在下圖中,可以看到s3和s4在String pool中引用相同的String對象“java”,因為它們是實例化的字符串,而s1和s2指的是單獨的對象,因為它們沒有實現(xiàn)或不使用String literal。

在Java中什么時候使用String.intern()方法?

4)另一件要知道的是intern()方法是一個非靜態(tài)方法,應(yīng)該使用Java中的String literal或String object調(diào)用。

這就是在Java中何時使用String.intern()方法。

整套架構(gòu)面試題及系統(tǒng)化的架構(gòu)師資料,熱愛技術(shù),喜歡程序員這一職業(yè),有理想成為一名架構(gòu)師,想面試跳槽漲薪,想提升自己的技術(shù)水平歡迎加入Java進(jìn)階架構(gòu)交流:加入142019080。

直接點擊鏈接加群。https://jq.qq.com/?_wv=1027&k=5lXBNZ7

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文是我自己在秋招復(fù)習(xí)時的讀書筆記,整理的知識點,也是為了防止忘記,尊重勞動成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 958評論 1 6
  • 從網(wǎng)上復(fù)制的,看別人的比較全面,自己搬過來,方便以后查找。原鏈接:https://www.cnblogs.com/...
    lxtyp閱讀 1,435評論 0 9
  • 前言 RTFSC (Read the fucking source code )才是生活中最重要的。我們天天就是要...
    二毛_coder閱讀 522評論 1 1
  • 轉(zhuǎn)自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,801評論 3 93
  • 2017年有一句話對我來說非常的困惑,那就是要不要all-in(全部投入)。對于all-in有兩個完全不同的觀點。...
    snailwww閱讀 913評論 0 1

友情鏈接更多精彩內(nèi)容