String为什么是final的

原因


  总的来说是为了:"效率",“线程安全”,和“共享”。

因为final不允许被继承,而String是被高度使用的,如果String允许被继承,会降低程序的性能。

  • 为了不可变性

    private final String  两者共同作用保证字符串的不可变性;

  • 实现字符串池

    多个字符串的值相同的话,他们指向的是同一个内存地址,可以节省空间,提高效率。

  • 线程安全

    正是字符串不可变,在并发多线程读同一个资源时,不可变对象不能被写,保证了多线程安全,同一个字符串实例可以被多个线程共享;

  • 如果字符串可变,黑客可能通过改变字符串指向对象的值造成安全漏洞

 

 

源码


JDK源码

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
  //这个value是用来装char的.明白了吧,String其实是char数组的包装类。
  //而这个数组是final类型的,不可能指向别的对象,但是可以改 private final char value[]; /** Cache the hash code for the string */缓存hashCode private int hash; // Default to 0 }

 

posted @ 2020-11-28 17:35  时间会有答案  阅读(424)  评论(0编辑  收藏  举报