この記事では、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を参照してください.
参考文献
対不変オブジェクト]。
https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html
[Immutable
java docsごとのオブジェクト]