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

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

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

不可变对象的定义

字段使用 private final 来修饰

不可变对象的例子

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

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

好处:

  • 线程安全

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

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

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

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

    • 不可变对象可以被多个对象共享,减少内存开销
    • JVM可以优化不可变对象的存储和访问
相关推荐
自己的九又四分之三站台19 分钟前
C# 接入 RasterLite2:从原生 DLL 加载到 Coverage、Section、Tile 验证
开发语言·c#·地理信息
飞翔的火箭弹20 分钟前
企业网络资产管理用什么系统工具
开发语言·网络·php
evans在进步21 分钟前
Spring Boot 核心机制详解:自动装配、事件监听、异步任务与请求映射
java·spring boot·后端
码云骑士26 分钟前
116-Python调用GPT-4V分析图片-Base64编码-多图-JSON结构化输出
开发语言·python·json
Zane199427 分钟前
HashSet、TreeSet、LinkedHashSet:底层都是"套壳"
java·后端
88号技师33 分钟前
2026年SCI-分数牛顿衍生优化算法Fractional Newton-derived optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
承渊政道34 分钟前
【Python编程—从入门到实践】(Python操作列表深度教程:循环、切片、元组与代码风格)
开发语言·python·pycharm·列表·元组·切片
相顾若初见41 分钟前
RuoYi后端jar镜像制作
java·jar
布值倒区什么name42 分钟前
Pycharm2026找不到编译器 点击运行运行不了
开发语言·python·pycharm
MacroZheng1 小时前
程序员看文档神器,装上它,看Spring官方文档就一目了然了!
java·人工智能·后端