美文网首页
String为什么是final的

String为什么是final的

作者: 小丸子的呆地 | 来源:发表于2021-07-17 18:27 被阅读0次

    什么是final,参看我的上一篇文章:Java关键字之final

    Java中我们最常用的类String被final修饰,final修饰类,代表了而这个类不允许被继承,这个类就是一个终结。

    为什么String类要被定义为final的呢?

    因为String类要保证他的实例不可变,不可变和被final修饰其实是两件事。
    String为了保证他的实例不可变做了三件事:

    • 内部成员变量char[]被final修饰,char[] 引用地址不可变。
    • 所有对外提供的方法,都不会去尝试修改char[]内部的元素。这就是封装的好处。
    • String类被final修饰,类不可以被继承。规避了有坏人想尝试通过继承重写来破坏String内部的数据。

    所以String类被定义为final最终的目的是为了保证String类实例不可变。

    为什么String类实例要设定为不可变?

    • 字符串缓冲池,使用享元模式,减少String对象的产生,而享元模式的弊端就是对象的内部状态不可变。
    • 使用安全,String是我们程序中最最常用的对象,不可变规避了直接在堆中直接改变对象内容,除非我们主动修改引用地址,否则我们将String传递进任何方法中,他都不会改变。防止一不小心就在其他函数内被更改了。
    • 线程安全,并发使用String时,不需要再去考虑他的线程安全问题。
    • 性能,由于String一出生或一初始化就不可变,所以一个String的hashcode是固定的不变的,可以只计算一次,并且String是最适合作为hash表结构中Key的类。
    • 设定为不可变之后,String就更贴近一个基本类型了,这可能也是JDK开发者的期望。

    相关文章

      网友评论

          本文标题:String为什么是final的

          本文链接:https://www.haomeiwen.com/subject/lbewpltx.html