#软件构造 Java中常见的mutable与immutable类

本文详细解析了Java中immutable与mutable类的概念,列举了常见的immutable类如String及基本类型封装类,以及mutable类如StringBuilder和ArrayList。深入探讨了immutable类的特性,如不可变性确保对象状态的一致性,适用于多线程环境。

在软件构造的学习中,很多地方都会牵扯到有关mutable与immutable类的辨析,这里总结一下 Java中常见的mutable与immutable类

首先简要回顾一下immutable与mutable类的定义

  • immutable类:immutable类是指这个类的实例一旦创建完成后,就不能改变其成员变量值,也就是不能改变对象的状态。首先,类需要声明为final,保证其不可以被继承,所有成员变量定义为private final,不提供改变成员变量的Mutators方法 ,通过构造器初始化成员变量,如果构造器传入了引用数据类型需要进行防御式拷贝。

图片来自https://www.cnblogs.com/pcideas/articles/5160689.html
图片来自https://www.cnblogs.com/pcideas/articles/5160689.html

  • mutable类:定义比较简单,创建之后,该对象拥有可以更改其值/引用的方法

常见的immutable类

  • String是immutable的,每次对于String对象的修改都将产生一个新的String对象,而原来的对象保持不变

  • 基本类型及其封装对象类型都是不可变的,即byte、short、int、long、float、double、char、boolean与封装类:Boolean, Byte, Character, Short, Integer, Long, Float, Double

  • Scanner 常见的扫描器

  • 将Iterator迭代器转换为Scala迭代器

  • 经过 Collections.unmodifiableList/Map/Set() 方法处理后的集合,但是变化后的类已经不是原有的List/Map/Set对象了, 但是这种“不可变”是在运行阶段获得的,编译阶段无法据此进行静态检查,比如尝试去sort() ,就不会在编译阶段报错,但是如果不销毁引用的话,仍有可能绕过封装对其修改,导致表示泄露的问题

常见的mutable类

  • StringBuilder StringBuilder类型是mutable的,创建成功后,可以利用一些方法来改变它指向地址中的的内容

  • StringBuffer

  • 常见的Map如HashMap

  • Java 中的常见的大多数迭代器Iterator

  • 常见的Collection类,如Arraylist和linklist

(总结有什么错误欢迎支出)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值