String與new String()的區別


JVM為了提升性能和減少內存開銷,避免字符串的重復創建,維護了一塊特殊的內存空間——字符串實例池。

String賦值的兩種方式。

1、String str = "test";

以這種方式賦值時,JVM會先從字符串實例池中查詢是否存在"test"這個對象,

如果存在,直接把實例池中"test"的地址返回給str。如果不存在,則會在實例池中創建"test"對象,並把該對象的地址返回給str。

所以通過==比較是,str1,str2指向的是同一地址,所以返回true;

2、String str = new String("test");

以這種方式賦值時,JVM會先從字符串實例池中查詢是否存在"test"這個對象,

若不存在則會在實例池中創建"test"對象,同時在堆中創建"test"這個對象,然后將堆中的這個對象的地址返回賦給引用str。

若實例池存在則直接在堆中創建"test"這個對象,然后將堆中的這個對象的地址返回賦給引用str。

這時str1和str2分別指向堆中不同的地址,所以返回false; 


免責聲明!

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



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