字符串的不可變性,從字面的意思上理解,這個「不可變」視乎是不成立的。spa
經過賦值操做咱們發現咱們能夠更改字符串變量的值,這種改變並不能推翻「字符串不可變性」中的不可變。調試
也就是說字符串變化並不指的是賦值這種變化。對象
經過字符串類型和值類型在內存中的存儲方式對比看看,字符串中的不可變到底指的是什麼?blog
值類型:內存
字符串:開發
不可變性:當你給一個字符串從新賦值以後,老值並無在內存中銷燬,而是從新開闢一塊空間存儲新值。字符串
若是咱們在實際開發中對很含有大量字符的字符串進行遍歷賦值修改,會對內存中產生不少沒法釋放的字符串對象,形成內存垃圾。變量
堆內存中字符串對象能夠用於(指向)多個字符串變量bfc
當代碼中存在多個不一樣的字符串變量,它們存儲的字符值都是相同的時候。遍歷
這些變量存儲的字符串不會每個都單獨去開闢空間,而是它們共用一個字符串對象,共同的指向了內存中的同一個字符串引用。
經過調試代碼咱們來驗證這個理論: