Java - изменяемые и неизменяемые объекты
В этой статье показана разница между объектами Mutable и Immutable в Java.
1. Mutable object - Вы можете изменить состояния и поля после создания объекта. Например:StringBuilder,java.util.Date и т. Д.
2. Immutable object - Вы не можете ничего изменить после создания объекта. Например:String, упакованные примитивные объекты, такие какInteger,Long и т. Д.
1. Пример изменяемого Java
Обычно он предоставляет метод для изменения значения поля, и объект может быть расширен.
MutableExample.java
package com.example;
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("example");
System.out.println(obj.getName());
// update the name, this object is mutable
obj.setName("new example");
System.out.println(obj.getName());
}
}
Выход
example new example
2. Неизменяемый пример Java
Чтобы создать неизменяемый объект, сделайте класс окончательным и не предоставляйте никаких методов для изменения полей.
ImmutableExample.java
package com.example;
// 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("example");
System.out.println(obj.getName());
// there is no way to update the name after the object is created.
// obj.setName("new example");
// System.out.println(obj.getName());
}
}
Выход
example
Note
Неизменяемый объект прост, потокобезопасен (не требует синхронизации), менее подвержен ошибкам и более безопасен. Если возможно, сделайте все объекты неизменяемыми.
P.S Please refer to the Effective Java Book – Item 15: Minimize mutability.