24. 什么是不可变对象,好处是什么
一个对象创建起来之后,内部的字段值不可再修改。任何修改之后,都会新创建一个对象。
不可变对象的定义
字段使用 private final 来修饰
不可变对象的例子
-
String : 字符串拼接会生成新的String对象,而不是原来的
javaString str = "Hello"; str = str + " World"; // 创建新字符串对象,原"Hello"未被修改
-
基本类型的包装类 :如:Integer Long 等
好处:
-
线程安全
- 不可变对象的状态不会改变,在多线程中,可以数据多共享,无需同步
-
简化并发编程
- 不需要担心对象被修改,减少了同步代码的复杂度
-
缓存友好
- 哈希值在对象创建时确定且固定,适合作为哈希键(HashMap 的键)
- 可安全缓存结果(如: String 的 hashCode 的缓存)
-
安全性
- 防止对象被意外修改
- 适合用于敏感数据
-
内存共享与优化
- 不可变对象可以被多个对象共享,减少内存开销
- JVM可以优化不可变对象的存储和访问