2016-12-28 4 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 

不変オブジェクトは、その状態オブジェクトが作成されると、初期化/変更することはできませんオブジェクトです時間が経つにつれて、それは変更することができます。

これらのオブジェクトには、「ミュータレータ」 - セッタ、または内部状態を変更する一般的なメソッドを使用しないでください。このクラスは、(フィールドnameage中)の状態を維持するものの、 そのオブジェクトが作成された後、この状態を変更することは不可能( -

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; 
    } 
} 

ご覧のとおり:ここでは

は不変オブジェクトの例です。コンストラクタは

ホープこれは、私は多くのリソースが利用可能でそこにいると確信している

+0

Personを本当に不変にするには、悪質な/愚かなユーザーを防ぐために、クラスをfinalにする必要がありますそれを拡張し、変更可能なデータ/ビヘイビアを追加するか、既存のメソッドの1つをオーバーライドして基礎となるオブジェクトを変更することができます。 – sisyphus

+0

あなたが正しいですね。私はコードを変更しています –

関連する問題