1. 程式人生 > >可變對象與不可變對象

可變對象與不可變對象

統計 內容 uil 更新 基礎上 abc size 有一個 常用

1.什麽是可變對象?

屬性變更時不新建對象的對象,如StringBuiler,可以將其中存儲的字符串看作屬性,調用StringBuilder.append(String str)追加字符串時,是在已有StringBuilder對象的基礎上進行的,沒有新建對象。

基本數據類型的包裝類以及String類以外的幾乎全部類的對象都是可變對象。

2.什麽是不可變對象?

屬性變更時必須新建對象的對象,如String,已有"String str=‘abc‘",再次賦值"str=‘efg‘",此時新建一個String對象存儲“efg”,str指向這個新建的對象。

基本數據類型的包裝類以及String類的對象都是不可變對象。

3.可變對象與不可變對象的選擇

不可變對象代表內存中的一個穩定區域,多個引用變量指向同一區域,一個引用變量嘗試改變對象的內容時,不會改變原對象的內容,而是新建一個對象,這樣就保證了數據的穩定,因此不可變對象通常用在需要保持數據穩定的情況。

在更新可變對象的屬性時不會新建對象,節省內存空間,因此可變對象主要用在屬性變化頻繁的情況,如計數器,需要建立統計對象與統計結果之間的映射關系,因此構建一個Map集合。Integer對象是不可變對象,不適用用來存儲統計結果,應該采用一個可變對象來存儲統計結果,這裏采用數組,當然也可以是自定義對象,其中有一個int屬性用來計數:

    public void
test01() { String str = "abc efe hig klm nop qrs"; String[] arr = str.split(" "); HashMap<String, int[]> map = new HashMap<String, int[]>(); for (String x : arr) { int[] count = map.get(x); if (count != null) count[
0]++; else map.put(x, new int[] { 1 }); } }

可變對象與不可變對象