为什么 String 被设计为是不可变的?

为什么 String 被设计为是不可变的?

  1. 成员属性value
    private final byte[] value;

value 属性为字节数组并且被final修饰,定义后value的地址是不可变的。
value 属性为private修饰的所以是类的私有属性,外部不能直接访问。

  1. 构造器
    除了构造器外没有对提供对value做赋值修改相关的功能。

  2. String 类被final所修饰
    不可以被继承

  3. 缓存hash值

private int hash;

因为String是不可变对象,所以可以缓存hash值减少哈希运算

  1. 设计为不可变的好处
    (1)对字符串做修改不会修改原有内存中的值,而是会创建一个新的对象,保证了原对象的引用内容不变
    (2)因为String是不可变的,所以hash值也不会变化,经过缓存hash值,可以更好更快的利用缓存得出hash值并且常用于map等集合的key值使用。
    (3)java中字符串存储于字符串常量池中,节省内存的使用。
    (4)因为是不可变所以天然的保证了线程安全,避免了很多不必要的同步操作。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值