[原創]JAVA字串池的個人理解,請各位高手指點!!

來源:互聯網
上載者:User

String a=new String("abc");
String b="abc";
String c=new String("abc");
問題:一共建立了一個String對象? 

關於字串池的理解:
String a=new String("abc");    總共建立了幾個對象?   2個

運行順序:
1.因為是new String()所以要在堆中建立新的空間
2.在池中搜尋與abc相同值的對象,因為沒有所以在池中建立abc對象!
3. 把池中的對象複製到堆中並在堆中建立一個對象,並返回堆的引用地址給a ,a 不是對象,a

中只儲存了返回的地址的變數。

String b="abc";    沒有建立任何對象  0個
  
首先該運算式沒有使用new關鍵字所以不會在堆中開闢空間,而是直接去字

符串池中進行尋找是否有資料相同的鍵,如果有則返回這個鍵的引用地址,

兩個字串指向符串池的地址!如果沒有則在字串池中直接建立對象!並

返回地址,這樣建立字串對象與堆區無關!
 
String c=new String("abc");  這次建立了一個對象! 1個

首先在字串池當中找這個值,沒有,則建立,因為在建立a的時候已經在

池中建立了,所以這個時候可以在字串池當中找到該對象,(又因為是

new String())並複製該對象在在堆中建立一個新的對象!
所以省去了在字串池當中建立對象,而是直接在堆中建立了一個對象!所

以是一個!

string d=b+"abc";     這個時候有一個字串引用所以在堆中建立一個空間並儲存值,

總結:建立字串的時候都要先去字串池進行尋找,如果沒有則建立,如

果有則不建立!

相關文章

聯繫我們

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