当前位置: 首页 > news >正文

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

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

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

不可变对象的定义

字段使用 private final 来修饰

不可变对象的例子

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

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

好处:

  • 线程安全

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

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

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

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

    • 不可变对象可以被多个对象共享,减少内存开销
    • JVM可以优化不可变对象的存储和访问
http://www.lryc.cn/news/623449.html

相关文章:

  • 【Docker】搭建一款功能强大且免费的开源在线绘图工具 - draw.io
  • 云原生俱乐部-RH134知识点总结(2)
  • 62.不同路径
  • 【计算机网络面试】键入网址到网页显示期间,发生了什么?
  • 网络常识-DNS如何解析
  • 数据结构初阶(19)外排序·文件归并排序的实现
  • Ugit使用记录
  • 【自动化运维神器Ansible】template流程控制:for循环与if条件判断详解
  • Flink作业执行的第一步:DataFlow graph的构建
  • C11期作业18(07.12)
  • 栈与队列:数据结构中的双生子
  • 【JavaEE】多线程 -- 单例模式
  • [python学习记录2]变量
  • Maven 开发实践
  • PCA的一些实际应用
  • 详解flink java基础(一)
  • 前端项目的打包部署
  • 【MySQL学习|黑马笔记|Day7】触发器和锁(全局锁、表级锁、行级锁、)
  • Docker Compose 安装 Neo4j 的详细步骤
  • Docker之自定义jkd镜像上传阿里云
  • Docker+飞算JavaAI=未来:全流程容器化AI开发实战
  • 堆(Heap):高效的优先级队列实现
  • 适用监测农作物长势和病虫害的高光谱/多光谱相机有哪些?
  • 已开源:Highcharts.NET,Highcharts Android,与Highcharts iOS集成
  • 【Virtual Globe 渲染技术笔记】8 顶点变换精度
  • p5.js 3D 形状 “预制工厂“——buildGeometry ()
  • 积鼎科技CFD VirtualFlow:引领国产多相流仿真技术,赋能工业智造
  • 6.Ansible自动化之-管理变量和事实
  • 使用vscode的task.json来自动执行make命令,而不直接使用终端
  • 智能化管理:开启海洋牧场新时代