什麼是可變/不可變對象,它們有什麼用? - 1

“嗨,阿米戈!”

“嗨,比拉博!”

“今天 Bilaabo 將向您介紹可變對象和不可變對象。

“創建後可以更改的對象稱為可變對象。”

“創建後不能更改的對象稱為不可變的。”

“是什麼決定了我能否改變一個對象?”

“新類的作者可以使該類的對像不可變。例如,如果將所有 setter 設為私有,則對象將只有一個構造函數和 getter;這意味著它在創建後將無法更改”

“那有什麼意義呢?”

“不可變對像有許多有用的屬性,但我將重點介紹幾乎所有不可變對象共有的兩個屬性:”

1)不可變對像比可變對象更容易實現。

2) 不可變對象可以跨多個線程同時自由使用。

“當開發人員決定編寫一個不可變類時,他通常會同時製作該類的可變和不可變版本。”

“但是寫兩個類而不是一個類有什麼意義呢?”

“有時候,當對象的不可變版本比可變版本更簡單/更快時,這是值得的。因此,他們製作了兩個版本。有點像 ArrayList 和 LinkedList:兩者都是列表,但一個針對特定目的進行了優化,第二個給其他人。”

“這已經更有意義了。”

“還有純粹不可變的類,它們沒有可變版本。”

“但是,如果我需要更改其中一個對像中的某些內容怎麼辦?您實際上可以用不可變對像做什麼?”

“通常,不可變類包含各種方法,這些方法就像它們改變對像一樣,但這些方法只是創建一個新對象並返回它,而不是改變對象本身。”

“這裡有些例子:”

Java代碼 描述
String s = "london";
String s2 = s.toUpperCase();
結果,s 包含字符串 «london» 並且 s2 包含 «LONDON»
Integer i = 1;
Integer j = i;
j++;
這是真正發生的事情:
Integer i = new Integer(1);
整數 j = i;
j = new Integer(i.getInt()+1);

“String 類是一個不可變類。所有 String 對像都是不可變的,但這並不妨礙我們使用它們。例如,String 類的 toUpperCase() 方法將 String 轉換為大寫(即替換所有小寫字母" _ _

“Integer 類也是一個不可變類。所有 Integer 對像都是不可變的。每次我們更改 Integer 對象時,我們實際上是在創建一個新對象。”

“真有趣!萬歲,Bilaabo。”

“我萬歲!Bilaabo 萬歲!”