字元串的不可變性,從字面的意思上理解,這個“不可變”視乎是不成立的。 通過賦值操作我們發現我們可以更改字元串變數的值,這種改變並不能推翻“字元串不可變性”中的不可變。 也就是說字元串變化並不指的是賦值這種變化。 通過字元串類型和值類型在記憶體中的存儲方式對比看看,字元串中的不可變到底指的是什麼? 值類 ...
字元串的不可變性,從字面的意思上理解,這個“不可變”視乎是不成立的。
通過賦值操作我們發現我們可以更改字元串變數的值,這種改變並不能推翻“字元串不可變性”中的不可變。
也就是說字元串變化並不指的是賦值這種變化。
通過字元串類型和值類型在記憶體中的存儲方式對比看看,字元串中的不可變到底指的是什麼?
值類型:
字元串:
不可變性:當你給一個字元串重新賦值之後,老值並沒有在記憶體中銷毀,而是重新開闢一塊空間存儲新值。
如果我們在實際開發中對很含有大量字元的字元串進行遍歷賦值修改,會對記憶體中產生很多無法釋放的字元串對象,造成記憶體垃圾。
堆記憶體中字元串對象可以用於(指向)多個字元串變數
當代碼中存在多個不同的字元串變數,它們存儲的字元值都是相同的時候。
這些變數存儲的字元串不會每一個都單獨去開闢空間,而是它們共用一個字元串對象,共同的指向了記憶體中的同一個字元串引用。
通過調試代碼我們來驗證這個理論: