先給出定義:
先申述乙個概念:變數 = 引用 + 值(也就是:該變數初始化的記憶體)
可變性與不可變性:引用可變與否,值可變與否。
值的可變性取決於:值的型別是否是可變的,這取決於建立該值的類是否可變。
而引用的可變性取決於:該變數命名時是否字首有(final)。
那麼對於乙個物件而言,其不可變性的程度:是什麼?
乙個物件的資料成員是變數,其具有引用與值。那麼當宣告該物件具有不可變性時,其內的資料成員的值與引用可變與否?引用可變否?值可變否?
人為定義的不可變類:可以自己進行設定,沒有討論的必要。
庫中的不可變類:基本資料型別的包裝類也沒有討論的必要。
collection的不可變包裝類也無討論必要,因為在某種程度上,其是直接將位址進行納入,不存在引用變數,其只是保證其內的元素不被新增, 而未保證其內的元素的值不被修改。
支援非可變性
概念 乙個非可變性的類是乙個簡單的類,每個例項包括的資訊都是他在被建立的時候就提供出來的,並且在物件的生命週期內不是不能更改的。這樣的類如 string,biginteger等等。為什麼會有這樣的類呢?他們包含了優雅的設計思想 簡單,不可變,穩定。其實有點很提倡使用非可變類,但是不一定非要使用。下面...
字串的不可變性
字串的不可變性,從字面的意思上理解,這個 不可變 視乎是不成立的。通過賦值操作我們發現我們可以更改字串變數的值,這種改變並不能推翻 字串不可變性 中的不可變。也就是說字串變化並不指的是賦值這種變化。通過字串型別和值型別在記憶體中的儲存方式對比看看,字串中的不可變到底指的是什麼?值型別 字串 不可變性...
共性和可變性分析
考慮設計中什麼應該是可變的。這種方法與關注引起重新設計的原因剛好相反。它不是考慮什麼會迫使設計發生改變,而是考慮什麼能夠在不引起重新設計的前提下改變。這時主要關注的就是對變化的概念進行封裝,這時許多設計模式的主題。如何在問題領域中找到不同變化,如何找到不同領域中的共同點。找到變化的地點,稱為 共性分...