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

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

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

不可变对象的定义

字段使用 private final 来修饰

不可变对象的例子

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

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

好处:

  • 线程安全

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

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

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

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

    • 不可变对象可以被多个对象共享,减少内存开销
    • JVM可以优化不可变对象的存储和访问
相关推荐
whitepure3 分钟前
万字详解Java中的面向对象(二)——设计模式
java·设计模式
whitepure5 分钟前
万字详解Java中的面向对象(一)——设计原则
java·后端
后台开发者Ethan23 分钟前
Python需要了解的一些知识
开发语言·人工智能·python
小奋斗32 分钟前
深入浅出:JavaScript中防抖与节流详解
javascript·面试
北京_宏哥33 分钟前
Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
前端·python·面试
2301_7930868733 分钟前
SpringCloud 02 服务治理 Nacos
java·spring boot·spring cloud
回家路上绕了弯40 分钟前
MySQL 详细使用指南:从入门到精通
java·mysql
小七rrrrr44 分钟前
动态规划法 - 53. 最大子数组和
java·算法·动态规划
AAA修煤气灶刘哥1 小时前
面试官: SpringBoot自动配置的原理是什么?从启动到生效,一文讲透
后端·spring·面试
我是哪吒1 小时前
分布式微服务系统架构第165集:阿里,字节,腾讯架构经验汇总
后端·面试·github