String类为什么是final的

作者:Jaskey Lam

链接:https://www.zhihu.com/question/31345592/answer/51549787

来源:知乎

String基本约定中最重要的一条是immutable。

的确声明String为final 和immutable是没有必然关系,但是假如String没有声明为final, 那么你的StringChilld就有可能是被复写为mutable的,这样就打破了成为共识的基本约定。

举个例子:一个方法可能本来接受String类型并返回其大写方式
public static String uppperString(String s){
        return s.toUpperCase();
}

你传入String 的s="test", 他不会修改字符串池中"test", 而是直接新建立一个实例"TEST"返回。但如果你的StringChild的toUpperCase()被你重写(override)为mutable的方式,然后你调用这个方法的时候传入的是StringChild实例, 那么整体(依赖于(过)方法uppperString的所有类)的行为就有可能出现错乱。

要知道,String是几乎每个类都会使用的类,特别是作为Hashmap之类的集合的key值时候,mutable的String有非常大的风险。而且一旦发生,非常难发现。

声明String为final一劳永逸。


传送门:
Why String is Immutable or Final in Java
Why is String class declared final in Java?



另外一篇解释的很到位的

https://www.zhihu.com/question/31345592/answer/114126087

尊重原作者意愿,没有转载。推荐看看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值