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

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

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

不可变对象的定义

字段使用 private final 来修饰

不可变对象的例子

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

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

好处:

  • 线程安全

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

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

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

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

    • 不可变对象可以被多个对象共享,减少内存开销
    • JVM可以优化不可变对象的存储和访问
相关推荐
Python学习导航1 分钟前
Python开源项目月排行 2025年10月
开发语言·python
爱吃巧克力的程序媛3 分钟前
Qt 异步编程---概述
开发语言·qt
琢瑜10 分钟前
问题1:Oracle Java路径干扰。问题2:环境变量加载顺序问题
java·maven
feifeigo12311 分钟前
MATLAB实现两组点云ICP配准
开发语言·算法·matlab
Yang-Never11 分钟前
Open GL ES->以指定点为中心缩放图片纹理的完整图解
android·java·开发语言·kotlin·android studio
fengfuyao98513 分钟前
粒子群算法(PSO)求解标准VRP问题的MATLAB实现
开发语言·算法·matlab
编程修仙16 分钟前
第十一篇 Spring事务
xml·java·数据库·spring
7哥♡ۣۖᝰꫛꫀꪝۣℋ18 分钟前
Spring Boot ⽇志
java·spring boot·后端
清晓粼溪19 分钟前
Mybatis02:核心功能
java·mybatis
weisonx19 分钟前
为什么要多写文章博客
java·c++