Java中 String为什么设计成不可变的?

Java 中的 String 类被设计为 不可变(Immutable),这是 Java 设计中一个非常关键的特性。不可变性意味着一旦一个 String 对象被创建,它的值就不能被修改。这种设计并非随意决定,而是出于 安全性、性能优化、线程安全、一致性 等多方面的考虑。


一、什么是不可变对象?

不可变对象是指对象在创建后其状态(属性)不能被修改的对象。在 Java 中,String 是一个典型的不可变类:

  • String 类是 final 的,不能被继承。
  • String 内部使用 private final char[] value 来存储字符序列,即内部字符数组是 final 的,创建后不能更改。
  • 所有对 String 的操作(如 substring()replace()toUpperCase())都会返回一个新的 String 实例,而不是修改原对象。

二、为什么设计成不可变的?

1. 安全性(Security)

不可变性可以防止对象在使用过程中被恶意修改,从而增强系统的安全性。

✅ 场景示例:
  • 作为密钥(Key)String 常用于 HashMapHashSet 等集合中作为键(Key)。如果 String 是可变的,修改其值将导致哈希值变化,从而破坏集合的结构,甚至引发数据丢失或错误。
Map<String, Object> map = new HashMap<>();
String key = "key"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lisonseekpan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值