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.