java中什么是不可变类

什么是不可变类

不可变类是指一旦创建对象后,其状态(属性值)就不能被修改的类。

一个不可变类具有以下特征:

  1. 类的实例变量声明为私有的,并且没有提供修改这些变量值的公共方法。
  2. 类是final的,防止被继承。
  3. 类的实例变量声明为final,一旦被初始化后就不能再修改。
  4. 没有提供修改状态的公共方法。

不可变类的优点是:

  1. 线程安全:由于不可变类的状态不变,所以不需要额外的同步机制来保护对象的一致性。
  2. 缓存优化:由于不可变类的对象是不可变的,可以在需要时进行缓存,以提高性能。
  3. 安全性:不可变类可以保证对象的一致性,避免了意外的状态修改。

常见的不可变类包括String、Integer包装类、BigDecimal等。这些类都具有不可变性,即一旦创建后,它们的值将不会被修改。

为什么 Java 中 String 是不可变类?

1、String 类中包含 char 数组 value、整形的 offset 和 count 三个属性,这三个属性都是 private 的,且没有提供方法修改数值,因此在初始化后无法从外部改变。
2、String 类中的这三个属性都是被 final 修饰的,无法从内部进行改变;
3、方法区有一块特殊存储区域 String Pool(字符串常量池),当创建 String 时,如果在 String Pool 中找到相同的字符串值,则会返回一个已存在 String 的引用而不会新建一个对象。假设 String 是可变的,则会导致其他引用这个字符串值的 String 的值发生变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值