什么是 Java 中的不可变类?
在 Java 中,不可变类(Immutable Class)是指一旦创建后其状态就不能被修改的类。不可变类具有以下特点:
- 对象的状态不能改变:一旦对象被创建,其内部状态就不能被修改。所有的字段都是 final 类型,确保它们在初始化后不能被改变。
- 线程安全:由于对象的状态不能改变,因此不可变类是线程安全的,可以在多线程环境中安全地共享,而不需要额外的同步措施。
- 简化编程模型:不可变对象可以避免许多与状态变化相关的复杂性,如并发问题、副作用等。
- 缓存和哈希码:由于对象的状态不会改变,可以安全地缓存计算结果,如哈希码,从而提高性能。
创建不可变类的步骤
- 使类声明为 final:防止其他类继承并修改其状态。
- 使所有字段声明为 final:确保字段在初始化后不能被修改。
- 提供构造函数:在构造函数中初始化所有字段,并且不提供任何修改状态的方法。
- 确保对可变对象的防御性拷贝:如果类包含引用类型字段,确保这些字段指向的对象也是不可变的,或者在返回时进行防御性拷贝。
示例代码
public final class ImmutableClass { private final String name; private final int age; // 构造函数 public ImmutableClass(String name, int age) { this.name = name; this.age = age; } // 提供 getter 方法,但不提供 setter 方法 public String getName() { return name; } public int getAge() { return age; } // 重写 equals 和 hashCode 方法 @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; ImmutableClass that = (ImmutableClass) obj; return age == that.age && name.equals(that.name); } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + age; return result; } }#java面试题#