在java中string为什么要设计成final的?
来源:网络整理 网络用户发布,如有版权联系网管删除 2018-08-19
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?
查看评论 回复