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

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

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

不可变对象的定义

字段使用 private final 来修饰

不可变对象的例子

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

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

好处:

  • 线程安全

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

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

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

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

    • 不可变对象可以被多个对象共享,减少内存开销
    • JVM可以优化不可变对象的存储和访问
相关推荐
德思特几秒前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
YOU OU17 分钟前
Spring IoC&DI
java·数据库·spring
один but you42 分钟前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
是码龙不是码农1 小时前
ThreadPoolExecutor 7 个核心参数详解
java·线程池·threadpool
kyriewen1 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
这是程序猿1 小时前
Spring Boot自动配置详解
java·大数据·前端
MY_TEUCK2 小时前
【Java 后端 | Nacos 注册中心】微服务治理原理、选型与注册发现实战
java·开发语言·微服务
测试员周周2 小时前
【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行
开发语言·人工智能·python·功能测试·ui·appium·pytest
罗超驿2 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
光泽雨2 小时前
c#中的Type类型
开发语言·前端