首頁  >  文章  >  Java  >  Java中的可變物件與不可變物件比較分析

Java中的可變物件與不可變物件比較分析

巴扎黑
巴扎黑原創
2017-07-20 13:18:142131瀏覽

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]++;elsemap.put(x, new int[] { 1 });
        }
    }

 不可變物件有幾個好處:
1. 記憶體分配固定,不需要擴充
2. 可以任意複製多份,不同執行緒之間不需要加鎖解鎖
這就是函數式程式設計中的「變數不變」的特性。其他當然還有一些函數式程式設計提倡的好處,例如程式碼清晰等等,但這個就見仁見智了。

以上是Java中的可變物件與不可變物件比較分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn