String类为什么设计成不可变的

在Java中将String设计成不可变的是综合考虑到各种因素的结果,需要综合考虑内存、同步、数据结构以安全方面的考虑。

String被设计成不可变的主要目的是为了安全和高效。

1)字符串常量池的需要

字符串常量池是Java堆内存中的一个特殊的存储区域,当创建一个String对象时,加入此字符串值已经在常量池中,则不会创建新的对象,而是引用已经存在的对象。

如下代码所示,将会在堆内存中只创建一个实际的String对象

String s1 = "abcd";
String s2 = "abcd";

2)允许String对象缓存HashCode

Java中String对象的哈希吗被频繁的使用,比如在HashMap等容器中。

String类的不变性保证了hash码的唯一性,因此可以放心地进行缓存。

3)安全性

字符串被许多的Java类库用来当做参数,例如网络连接地址URL、文件路径、反射机制所需要的String参数等,假如String不是固定不变的,将会引起各种安全隐患。

不可变对象天生就是线程安全的。

转载于:https://www.cnblogs.com/0820LL/p/9822220.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值