1. 程式人生 > 其它 >軟體構造--immutability mutability的區別簡述

軟體構造--immutability mutability的區別簡述

java 不變性

最後階段還是對可變性這裡不是很理解,在這總結一下:

Immutability 不變性,是key design principle
不變資料型別:一旦被建立,其值就不能被改變
String是典型的不變型別,每次改變的時候實際上都是new了一個新的String。
對比之下,StringBuilder是字串的可變類,修改的時候不會建立新的變數。

對於所有的資料型別來說,常見的不變類包括全部的基礎型別和他們的包裝類(Integer等),以及String和BigInteger這樣的物件類。其餘的Object類都是可變的。對於像set,list等容器來說,由於他們有add,remove這樣的mutator函式,它們在建立之後都是可以被改變的,所以他們都是可變的。若想把他們變成不可變的可以借用collaction裡的wrapper把他們變成undefinedset等,程式就會使你的set、list無法再執行mutator,也就是不可變。在這種情況下如果我們還呼叫mutator的話會在動態檢查中被發現並丟擲異常。
所有的不變類都是沒有mutator的。

同樣我們除了資料型別的不變性,還有引用的不變性。資料型別的不變性指一個數據被創建出來之後便不能被改變,而引用的不變性則指當一個變數引用另一個變數之後,這個變數不可以再引用別的變數,即x=y後不能執行x=z。要想實現引用的不變性需要我們用final去修飾變數。