Java面试题更新 2026-08-05

请解释 Java 中不可变类的概念,包括其定义、核心特征、设计要点和典型例子,并说明它在实际开发中的价值。

技术原理方案权衡Java

考察说明

考查对 Java 不可变类概念、设计原则和实际应用的掌握程度。

回答思路

  1. 【回答框架 1】不可变类指创建后其状态不可更改的类,Java 中典型如 String、基本类型的包装类。其核心特征包括:类声明为 final 阻止继承,所有字段为 private final,不提供 setter 方法,任何修改操作返回新对象而非修改原状态。
  2. 【回答框架 2】设计不可变类需遵循具体步骤:将类设为 final,所有字段设为 private final,通过构造器或静态工厂初始化所有字段,不暴露修改字段的方法,若字段为可变对象需进行防御性拷贝并返回副本。
  3. 【回答框架 3】不可变类天然线程安全,因为无状态变化,可安全共享和缓存,常用于常量、配置对象、函数式编程中的值对象,并能作为 HashMap 的 key,因其 hashCode 稳定。
  4. 【回答框架 4】需注意过度使用不可变类可能导致对象创建频繁,影响性能,应结合场景权衡,如使用建造者模式优化构建过程。
  5. 【关键点 1】不可变类核心是不可修改状态,需类为 final 且字段 private final。
  6. 【关键点 2】对可变字段需防御性拷贝,保证真正不可变。
  7. 【关键点 3】不可变类线程安全、适合做 Map 的 key。
  8. 【易错点 1】只将字段设为 final 而不进行防御性拷贝,可变字段仍可被修改。
  9. 【易错点 2】误以为所有包装类都不可变,如 StringBuffer 可变。
  10. 【易错点 3】过度设计导致性能下降,需权衡对象创建成本。