24. 什么是不可变对象,好处是什么

24. 什么是不可变对象,好处是什么

一个对象创建起来之后,内部的字段值不可再修改。任何修改之后,都会新创建一个对象。

不可变对象的定义

字段使用 private final 来修饰

不可变对象的例子

  • String : 字符串拼接会生成新的String对象,而不是原来的

    java 复制代码
    String str = "Hello";
    str = str + " World"; // 创建新字符串对象,原"Hello"未被修改
  • 基本类型的包装类 :如:Integer Long 等

好处:

  • 线程安全

    • 不可变对象的状态不会改变,在多线程中,可以数据多共享,无需同步
  • 简化并发编程

    • 不需要担心对象被修改,减少了同步代码的复杂度
  • 缓存友好

    • 哈希值在对象创建时确定且固定,适合作为哈希键(HashMap 的键)
    • 可安全缓存结果(如: String 的 hashCode 的缓存)
  • 安全性

    • 防止对象被意外修改
    • 适合用于敏感数据
  • 内存共享与优化

    • 不可变对象可以被多个对象共享,减少内存开销
    • JVM可以优化不可变对象的存储和访问
相关推荐
月夕·花晨40 分钟前
Gateway-过滤器
java·分布式·spring·spring cloud·微服务·gateway·sentinel
hssfscv2 小时前
JAVA学习笔记——9道综合练习习题+二维数组
java·笔记·学习
人工干智能3 小时前
科普:Python 中,字典的“动态创建键”特性
开发语言·python
初听于你4 小时前
缓存技术揭秘
java·运维·服务器·开发语言·spring·缓存
小蒜学长5 小时前
springboot多功能智能手机阅读APP设计与实现(代码+数据库+LW)
java·spring boot·后端·智能手机
长路归期无望6 小时前
C语言小白实现多功能计算器的艰难历程
c语言·开发语言·数据结构·笔记·学习·算法
是大强6 小时前
stm32摇杆adc数据分析
开发语言
蓝莓味的口香糖7 小时前
【JS】什么是单例模式
开发语言·javascript·单例模式
zizisuo7 小时前
解决在使用Lombok时maven install 找不到符号的问题
java·数据库·maven
linux kernel7 小时前
第二十三讲:特殊类和类型转换
开发语言·c++