この記事では、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ごとのオブジェクト]