不可变对象顾名思义不可改变的对象

一旦构造器完成执行,该实例即无法改变

意味着可以传递对象的引用,不用担心改变其内容,特别是在处理并行时,不可变对象不存在锁的问题,易于构造使用

final class ImmutableClass {final String str;final int value;final int[] ints;public ImmutableClass(final String str, final int value) {this.str = str;this.value = value;}public String getStr() {return str;}public int getValue() {return value;}
}

1.使用final修饰类

保证类不可继承,保证其不变性

2.使用final修饰类属性

防止外部改变其属性,破坏不变性

3.类中包含类引用时,应使用深拷贝

public ImmutableClass(int[] ints) {this.ints = ints;
}

当直接通过构造器初始化类内部对象时,可通过外部对象的改变从而破坏类的内部状态,破坏其不变形

public ImmutableClass(int[] ints) {this.ints = ints.clone();
}

通过深度拷贝,保证状态的不变性

java中不可变对象(immutable object)是什么,有什么意义相关推荐

  1. java object大小_在Java中,确定对象object大小的最佳方法是什么? - Break易站

    例如,假设我有一个应用程序,它可以读取包含一堆数据行的CSV文件.我根据数据类型向用户提供行数摘要,但是我想确保不读取太多数据行并导致OutOfMemoryErrors.每一行都会翻译成一个对象.有没 ...

  2. java 字符串是对象吗_解析Java中的String对象的数据类型

    解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...

  3. js解析java对象数组_js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...

  4. (转)java中对集合对象list的几种循环访问总结

    Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一些讲 ...

  5. Java中的dozer对象转换

    Java中的dozer对象转换 1.dozer介绍 Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象. dozer是用来对两个对象之间属性转换的工 ...

  6. java中如何获取对象的内存地址

    java中如何查看对象地址:使用  System.identityHashCode("对象") 即可 eg: Integer i = new Integer(5);System.i ...

  7. java定义对象数组初始化_怎么定义对象数组 JAVA中怎么初始化对象数组?

    java类怎样定义数组对象数组 在c++编程中,怎么定义对象数组的指针? JAVA中怎么初始化对象数组? java中怎么创建对象数组?比如我创建了一个学生类Sclass Student{ } 类中怎么 ...

  8. Java中的可变类型与不可变类型

    一.可变对象与不可变对象 Java中某些对象是可变的(mutable),它们有改变内部值的方法.例如,一个StringBuilder对象有办法来改变字符串内部的字符,等等. StringBuilder ...

  9. java中系统撤销对象顺序实例,撤消/重做功能Java的对象序列化

    游戏编程与"企业应用程序"编程和"webapp编程"没有多大关系. 所以这取决于你正在做什么样的游戏,但你的方法和gaven所以这些票价与游戏状态在" ...

最新文章

  1. SUCEFUL:将ATM变得“惟命是从”的新型恶意程序
  2. wsl for pycharm vscode
  3. 成功解决win10下dos中运行tensorboard --logdir=logs和调用events.out.tfevents一闪而过的问题
  4. 如何使用 Istio 进行多集群部署管理(一)
  5. 实战|记一次绕过宝塔防火墙的BC站渗透
  6. nacos 读取纯数字字符 出错 @value
  7. [渝粤教育] 天津城建大学 混凝土结构设计原理A 参考 资料
  8. Android 内容提供器---简介
  9. java正则表达式匹配`\`
  10. 计算机绘图自考知识点,全国自考机械制图一试题2004.04
  11. 警告 初始化默认驱动器时出错“找不到运行 Active Directory Web 服务的默认服务器。”...
  12. 计算大数阶乘--VB Script 版
  13. 前端花瓣飘落特效代码
  14. android 广告栏效果,叫教你打造一个滑动悬浮置顶的视觉效果,给你的广告栏增加一些特色...
  15. 数据分析·零散知识点
  16. mysql主从配置duxi_[从0到1搭建ABP微服务] - 搭建授权服务
  17. 【自动驾驶】鸽了很久的小物体目标检测代码【小物体目标检测】
  18. Vue响应式原理(defineProperty)
  19. ARKit之路-ARKit概述之二
  20. 被127次掌声打断的浙江大学教授郑强的经典语录.(大家都看

热门文章

  1. parellels desktop启动虚拟机报“操作失败”
  2. Excel表列名称(基本实现)
  3. ios5.1.1旧版软件下载_苹果iOS 14.1正式版推送 关闭旧版本降级通道
  4. 【知识兔】Excel中的F1~F12快捷键,你还不会?强大到爆~
  5. 学习笔记1--过滤器代理
  6. [爆笑]吃了伟哥的公鸡
  7. dva使用及项目搭建
  8. 树莓派3B+ 远程下载服务器(Aria2)
  9. 吃透JAVA的Stream流操作,多年实践总结
  10. EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP 寄存器详解