作者:Jaskey Lam
链接:https://www.zhihu.com/question/31345592/answer/51549787
来源:知乎
传送门:
Why String is Immutable or Final in Java
Why is String class declared final in Java?
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
尊重原作者意愿,没有转载。推荐看看