Java中的字串池

來源:互聯網
上載者:User

  對於java程式中的字元直接量,JVM會使用一個字串池來儲存它們。當第一次使用某個字串直接量時,JVM會將它放入字串池中進行緩衝。在一般情況下,字串池中的字串對象不會被記憶體回收。當程式再次需要使用該字串時,無需重新建立一個新的字串就可以直接讓引用變數直接指向字串中已有的字串。而使用new操作建立的字串對象不指向字串池中的對象,但是可以使用intern方法使其指向字串池中的對象。

public class StringDemo {public static void main(String args[]){String str1 = "abc";String str2 = "abc";String str3 = "def";String str4 = "abcdef";String str5 = "abc" + "def";//在字串池中能找到“abcdef”對象,故str5 == str4 為trueString str6 = str2 + str3;//在運行時才知道,也就是說str1+str2是在堆裡建立的String str7 = new String("abcdef");//new操作建立的字串對象不指向字串池中的對象String str8 = str7.intern();//使用intern方法使str7指向的對象加入字串池中if(str1 == str2){System.out.println("此時str1引用變數與str2引用變數" +"是指向在字串池中的同一個記憶體塊");}else{System.out.println("此時str1引用變數與str2引用變數" +"不是指向在字串池中的同一個記憶體塊");}if(str4 == str5){System.out.println("此時str4引用變數與str5引用變數" +"是指向在字串池中的同一個記憶體塊");}else{System.out.println("此時str4引用變數與str5引用變數" +"不是指向在字串池中的同一個記憶體塊");}if(str4 == str6){System.out.println("此時str4引用變數與str6引用變數" +"是指向在字串池中的同一個記憶體塊");}else{System.out.println("此時str4引用變數與str6引用變數" +"不是指向在字串池中的同一個記憶體塊");}if(str4 == str7){System.out.println("此時str4引用變數與str7引用變數" +"是指向在字串池中的同一個記憶體塊");}else{System.out.println("此時str4引用變數與str7引用變數" +"不是指向在字串池中的同一個記憶體塊");}if(str4 == str8){System.out.println("此時str4引用變數與str8引用變數" +"是指向在字串池中的同一個記憶體塊");}else{System.out.println("此時str4引用變數與str8引用變數" +"不是指向在字串池中的同一個記憶體塊");}}}
輸出:此時str1引用變數與str2引用變數是指向在字串池中的同一個記憶體塊此時str4引用變數與str5引用變數是指向在字串池中的同一個記憶體塊此時str4引用變數與str6引用變數不是指向在字串池中的同一個記憶體塊此時str4引用變數與str7引用變數不是指向在字串池中的同一個記憶體塊此時str4引用變數與str8引用變數是指向在字串池中的同一個記憶體塊

  

  因為字串池中的字串對象不會被記憶體回收,所以當某個字串池中的字串對象失去引用時,它將變成垃圾,而字串池又不回收。於是便產生了java記憶體泄露。樣本如下:

public class AnotherStringDemo {public static void main(String args[]){String str1 = "abc";String str3 = "def";str3 = str1 ;System.out.println(str3);System.out.println(str1);}}

輸出:

abc
abc
("def"失去引用,將成為垃圾,進而記憶體泄露)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.