不可变类就是对象一旦创建完成,转态就定死在那了,后面没法再改,最典型的就是String,还有Integer,Long、Boolean这些基本的包装类。

实现条件:

  1. 类声明为final,防止子类继承后搞出可变行为
  2. 所有字段都是private final,只能在构造阶段赋值一次
  3. 通过构造函数初始化所有字段
  4. 不提供任何 setter 或者修改状态的方法
  5. 如果字段引用了可变对象,getter必须返回副本,不能把原对象暴露出去

核心价值:

  • 天生线程安全:转态不能改,多线程随便访问,不用加锁
  • 适合做缓存key:比如HashMap的key要求 hashCode稳定,不可变对象天然满足,但是String拼接频繁的场景内存压力不小。