この記事では、JavaのMutableオブジェクトとImmutableオブジェクトの違いを説明します。

{空} 1。

変更可能なオブジェクト

– オブジェクトの作成後に状態とフィールドを変更することができます。例:

StringBuilder

、` java.util.Date`など

{空} 2。

変更不能なオブジェクト

– オブジェクトの作成後は何も変更できません。例:

String

、` Integer`、 `Long`などのボックス化されたプリミティブオブジェクト

1. Java Mutableの例

通常、フィールド値を変更するメソッドを提供し、オブジェクトを拡張することができます。

MutableExample.java

package com.mkyong;

public class MutableExample {

    private String name;

    MutableClass(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

   //this setter can modify the name
    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[]args) {

        MutableExample obj = new MutableExample("mkyong");
        System.out.println(obj.getName());

       //update the name, this object is mutable
        obj.setName("new mkyong");
        System.out.println(obj.getName());

    }
}

出力

mkyong
new mkyong

2. Javaの変更不能な例

不変オブジェクトを作成するには、クラスをfinalにし、フィールドを変更するメソッドを提供しないでください。

ImmutableExample.java

package com.mkyong;
//make this class final, no one can extend this class
public final class ImmutableExample {

    private String name;

    ImmutableExample (String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

   //no setter

    public static void main(String[]args) {

        ImmutableExample obj = new ImmutableExample("mkyong");
        System.out.println(obj.getName());

       //there is no way to update the name after the object is created.
       //obj.setName("new mkyong");
       //System.out.println(obj.getName());

    }
}

出力

mkyong


P.S Effective Java Book – Item 15:Minimize mutabilityを参照してください.

参考文献

java docsごとのオブジェクト]


不変

リンク://タグ/java/[java]

可変