在Java中,不可变对象的状态在创建后不可修改,但必须引用其他对象。它们在多线程环境中非常有用,因为多个线程无法更改对象的状态,因此不可变对象是线程安全的。不可变对象对于避免时间耦合非常有用,并且总是具有故障原子性。
另一方面,可变对象具有可以更改的字段,不可变对象在创建对象后没有可以更改的字段。
序号 | 要点 | 可变对象 | 不变的对象 |
---|---|---|---|
1 | 基本的 | 创建可变对象后,我们可以修改其状态 | 创建对象后,我们无法修改其状态。 |
2 | 线程安全 | 可变对象不是线程安全的 | 不可变的对象是线程安全的。 |
3 | final | 可变类不是最终类 | 要创建一个不可变的对象,请将类定为final |
4 | 实例 | 默认情况下,所有类及其对象都是可变的。 | 字符串和所有包装器类都是不可变类的实例 |
public final class ImmutableClass { private String laptop; public String getLaptop() { return laptop; } public ImmutableClass(String laptop) { super(); this.laptop = laptop; } } public class Main { public static void main(String args[]) { ImmutableClass immutableClass = new ImmutableClass("Dell"); System.out.println(immutableClass.getLaptop()); } }
public class MuttableClass { private String laptop; public String getLaptop() { return laptop; } public void setLaptop(String laptop) { this.laptop = laptop; } public MuttableClass(String laptop) { super(); this.laptop = laptop; } } public class Main { public static void main(String args[]) { MuttableClass muttableClass = new MuttableClass("Dell"); System.out.println(muttableClass.getLaptop()); muttableClass.setLaptop("IBM"); System.out.println(muttableClass.getLaptop()); } }