String 类为什么是 final 的

final 关键字的作用:

        1. 若 final 修饰类,则表明该类不可被继承

        2. 若 final 修饰方法,则表明该方法不可被重写

        3. 若 final 修饰变量,则该变量的值一经初始化后便不能被修改

public final class String implements Serializable, Comparable<String>, CharSequence {
    
    private final byte[] value;
    
    // ...

}

1. final 修饰 String 类,String 类不可被继承

2. String 类的值 value 保存在 byte 数组中,该数组被 private final 修饰

        private 修饰,表明 value 无法被外部对象访问 

        final 修饰,表明 value 的引用地址不能被修改

        保护性拷贝保证了 value 的内容不会被修改

so,String 类是不可变类

那么,String 类为何要设计为不可变类?

字符串常量池的需求

字符串被创建时,会优先判断该字符串是否已存在于字符串常量池中

        若存在,则返回现有字符串的引用

        若不存在,则创建一个新的对象

图 1

1. 创建 str2

2. 判断 hello 是否已存在于字符串池中

3. 存在,返回 str1 的引用

若 String 类不是不可变类,修改 str1 的内容为 world,str2 的内容也会被修改为 world 

so,字符串池是来帮倒忙的吗?

缓存 hashcode

String 类是不可变类保证了 hashcode 的值不会被改变,使得该 hashcode 无需被重复计算

安全性

线程安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值