2016-12-28 65 views
-1

任何人都可以解釋一個簡單的例子,在java中的可變和不可變對象之間的區別?java中的可變和不可變對象

+1

我確定有很多可用的資源。這[SO](http://stackoverflow.com/questions/279507/what-is-meant-by-immutable)可能會有所幫助。 – Kulasangar

+9

下面是關於這個主題的一個很好的鏈接:http://stackoverflow.com/questions/214714/mutable-vs-immutable-objects –

回答

1

可變對象是其狀態可以更改的對象。

在Java中的狀態與數據字段

實現可變對象的示例

class Counter { 
    private int i = 0; 

    public void increase() { 
     i++; 
    } 
} 

i所以代表類Counter這裏的內部狀態。

Counter counter = new Counter(); 
counter.increase(); // somewhere in the code 

在另一方面: 不可變對象是對象,它們的狀態一旦創建了對象不能改變/初始化,它可以隨着時間的推移而改變。

這些對象不應該有'mutators'設置器,或者在一般的方法中改變內部狀態。

這裏是一個不可變對象的例子:

public final class Person { 
    private final String name; 
    private final int age; 

    public Person(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public int getAge() { 
     return this.age; 
    } 
} 

正如你看到的 - 雖然這個類保持狀態(場nameage) 它不可能在創建對象之後,再改變這種狀態(構造函數被稱爲)

希望這會有所幫助

+0

爲了讓Person真正不可變,你還應該讓class爲final,以防止惡意/愚蠢的用戶從擴展它並添加可變數據/行爲或覆蓋現有方法之一,使它們突變基礎對象。 – sisyphus

+0

是的,你是對的。我正在更改代碼 –