字串的不可變性,從字面的意思上理解,這個「不可變」視乎是不成立的。
通過賦值操作我們發現我們可以更改字串變數的值,這種改變並不能推翻「字串不可變性」中的不可變。
也就是說字串變化並不指的是賦值這種變化。
通過字串型別和值型別在記憶體中的儲存方式對比看看,字串中的不可變到底指的是什麼?
值型別:
字串:
不可變性:當你給乙個字串重新賦值之後,老值並沒有在記憶體中銷毀,而是重新開闢一塊空間儲存新值。
如果我們在實際開發中對很含有大量字元的字串進行遍歷賦值修改,會對記憶體中產生很多無法釋放的字串物件,造成記憶體垃圾。
堆記憶體中字串物件可以用於(指向)多個字串變數
當**中存在多個不同的字串變數,它們儲存的字元值都是相同的時候。
這些變數儲存的字串不會每乙個都單獨去開闢空間,而是它們共用乙個字串物件,共同的指向了記憶體中的同乙個字串引用。
通過除錯**我們來驗證這個理論:
關於不可變性與可變性的「巢狀」聯想
先給出定義 先申述乙個概念 變數 引用 值 也就是 該變數初始化的記憶體 可變性與不可變性 引用可變與否,值可變與否。值的可變性取決於 值的型別是否是可變的,這取決於建立該值的類是否可變。而引用的可變性取決於 該變數命名時是否字首有 final 那麼對於乙個物件而言,其不可變性的程度 是什麼?乙個物...
C 字串常用操作和字串的不可變性
c 字串常用方法 方法作用 int len str.length 獲取字串中字元個數 str str.toupper 將字串中所有字元轉換成大寫 str str.tolower 將字串中所有字元轉換成小寫 bool b str1.equals str2,stringcomparison.ordina...
c 基礎 字串的不可變性和駐留機制
堆的分配向高位址擴充套件,棧的分配向低位址擴充套件。字串的不可變性 恆定性 當你給乙個字串重新賦值之後,老值並沒有被銷毀 覆蓋 而是重新開闢了一塊空間儲存新值il 中可以檢視 所以我們使用字串擴充套件方法時,其實都是乙個新的物件 trim 字串的駐留機制 clr中維護著乙個駐留池 intern po...