java String的intern方法_java

來源:互聯網
上載者:User

首先我們應該清楚的是JDK1.6和JDK1.7中String類的intern方法還是有差別的: 

 JDK1.6中的intern:   

調用intern方法的時候首先會去常量池中查看是否存在與當前String值相同的值,如果存在的話,則直接返回常量池中這個String值的引用;如果不存在的話,則會將原先堆中的該字串拷貝一份到常量池中。  

JDK1.7中的intern:   

調用intern方法的時候首先會去常量池中查看是否存在與當前String值相同的值,如果存在的話,則直接返回常量池中這個String值的引用;如果不存在的話,則只會將原先堆中該字串的引用放置在常量池中,並不會將拷貝整個字串到常量池中。   

這也就說明,JDK1.6和JDK1.7對於常量池中不存在此字串的情況處理不同。    

下面通過執行個體來進行驗證和解釋:      

執行個體:

public static void main(String[] args) {   String str = "str"+new String("01");①   str.intern();②   String str1 = "str01";③   System.out.println(str == str1);      String str2 = new String("str01");④   str2.intern();⑤   String str3 = "str01";⑥   System.out.println(str2 == str3);      String str4 = "str01";⑦   String str5 = new String("str")+new String("01");⑧   str5.intern();⑨   System.out.println(str4 == str5); 

在JDK1.6下輸出結果是:

false
false
false

解釋:

①執行時會在堆記憶體建立一個值為"str01"的字串對象str,同時在常量池建立一個"str"以及"01"常量;

②執行時會首先去常量池中查看是否存在一個值為"str01"的常量,發現不存在,JDK1.6的做法就是將該字串"str01"在常量池中也產生一份;

③執行時會在常量池中建立一個"str01"對象,發現已經存在,因而不會建立;
第一個輸出false的原因是:str指向的是堆記憶體的"str01",而str1指向的是常量池中的"str01";

④執行時會在堆記憶體建立一個值為"str01"的字串對象str2,同時在常量池中建立一個值為"str01"的常量;

⑤執行時會首先去常量池中查看是否存在值為"str01"的常量,發現存在,則直接返回這個常量引用;

⑥執行時會在常量池中建立一個值為"str01"的常量,如果發現已經存在,則不會建立;

第二個輸出false的原因是:str2指向的是堆記憶體的"str01",而str3指向的是常量池中的"str01";

⑦執行時會在常量池建立一個值為"str01"的常量;

⑧執行時會在堆記憶體建立一個值為"str01"的字串對象str5,同時在常量池建立一個"str"以及"01"常量;

⑨執行時會去常量池查看是否存在值為"str01"的常量,發現存在則直接返回這個常量引用;
第三個輸出false的原因是:str5指向的是堆記憶體的"str01",而str4指向的是常量池中的"str01";

在JDK1.7下輸出結果是:

true
false
false

解釋:

發現只有第一個輸出結果不一樣,所以我們只解釋第一個的原因:

①執行時會在堆記憶體建立一個值為"str01"的字串對象str,同時在常量池建立一個"str"以及"01"常量;(這點和JDK1.6沒什麼區別)

②執行時會首先去常量池中查看是否存在一個值為"str01"的常量,發現不存在,JDK1.7的做法就是將堆記憶體中"str01"的引用複製到了常量池中;

③執行時會在常量池中建立一個"str01"對象,發現已經存在,因而不會建立;
那麼此時的str和str1都將指向的是堆記憶體中的"str01"的值,所以兩者相等;

以上就是對JDK1.6和JDK1.7中String類的intern方法的對比,是有差別的,有需要的朋友可以參考下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.