簡體   English   中英

java String的不變性

[英]java String's immutability

如果我跑步

String s1="abc";

那么之間有什么區別:

String s2=new String(s1);

String s2="abc";

這就是我的困惑:

Head First Java表示:“如果String池中已經存在一個具有相同值的String,則JVM不會創建重復項,它只是將您的引用變量引用到現有條目。”在我看來, s1已經創建了“ abc”,s2只是引用它。 我對嗎??

當您編寫String s2="abc"; 並且"abc"已經在池中,那么您將不會得到重復-您將獲得對現有String的引用。

但是,如果您編寫new String(something) ,則無論池中是否有匹配的String ,您都會得到一個新的String

在這種情況下, 字符串常量池出現在圖片中,如下面的屏幕快照所示。

我認為它將幫助您直觀地理解它。

String s1="abc"; // s1 will go to String constant pool

String s2=new String(s1); // any object created by "new" keyword will go to Heap

String s2="abc"; // s1 and s2 both will refer to same string in constant pool

在此處輸入圖片說明

new關鍵字將強制在堆中創建一個新的字符串對象,即使它已經存在於字符串池中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM