《架構師之路1》三張圖徹底瞭解Java中字串的不變性

weixin_34365417發表於2018-06-03

定義一個字串

String s = "abcd";
2399767-82dbf2e4d631b649
image

s中儲存了string物件的引用。下面的箭頭可以理解為“儲存他的引用”。

使用變數來賦值變數

String s2 = s;
2399767-b18f950d6db0e7cf
image

s2儲存了相同的引用值,因為他們代表同一個物件。

字串連線

s = s.concat("ef");
2399767-ee3c526363720f8a
image

s中儲存的是一個重新建立出來的string物件的引用。

總結

一旦一個string物件在記憶體(堆)中被建立出來,他就無法被修改。特別要注意的是,String類的所有方法都沒有改變字串本身的值,都是返回了一個新的物件。

如果你需要一個可修改的字串,應該使用StringBuffer 或者 StringBuilder。否則會有大量時間浪費在垃圾回收上,因為每次試圖修改都有新的string物件被建立出來。

相關文章