String 在內存中如何存儲的


基本數據類型由於長度固定,且需要空間比較少,所以直接存儲在中;而對象比較大,所以棧中只存儲一個4btye的引用地址(邏輯地址)。

java中對String對象特殊對待,所以在heap區域分成了兩塊:

一塊是String constant pool,用於存儲java字符串常量對象(確切的說應該屬於方法區)。
另一塊用於存儲普通對象及字符串對象。

PS:字符串常量池,應該只是運行時常量池的一塊區域。此外整型(只有0-127)也在常量池中。

而string的創建有兩種方法:

String a = "abc"; 
String b=new String("abc");

對於第一種,jvm只會在String constant pool 中尋找是否已經存在"abc"常量:

如果有"abc" 常量,則返回;
如果沒有,則在常量池中創建該常量,並且將此常量的引用返回給String a;

對於第二種,jvm只在堆中創建字符串對象"abc” 。不會在常量池中創建。

 

雖然new String()方法並不會把"abc” 加入到String constant pool中,但是可以手動調用intern()將字符串對象加入到String constant pool中

補充:JavaString的不可變性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM