public final class String implements java.io.Serializable, Comparable<String>, CharSequence { }
String類有final修飾符,而final修飾的類是不容許被繼承的,實現的細節也沒法改變。java
1.帶有 final 修飾符的類是不可派生的。 如 java.lang.String, 爲 String 類指定 final 防止了人們覆蓋 length() 方法。sql
2.若是指定一個類爲 final,則該類全部的方法都是 final。 java 編譯器會尋找機會內聯(inline)全部的 final 方法。數據庫
3.由於字符串是不可變的,因此是多線程安全的,同一個字符串實例能夠被多個線程共享緩存
4.類加載器要用到字符串,不可變性提供了安全性,以便正確的類被加載。譬如你想加載java.sql.Connection類,而這個值被改爲了myhacked.Connection,那麼會對你的數據庫形成不可知的破壞。安全
5.由於字符串是不可變的,因此在它建立的時候hashcode就被緩存了,不須要從新計算。這就使得字符串很適合做爲Map中的鍵,字符串的處理速度要快過其它的鍵對象。這就是HashMap中的鍵每每都使用字符串。多線程
6.當字符串是不可變時,字符串池纔有可能實現。字符串池的實現能夠在運行時節約不少heap空間,由於不一樣的字符串變量都指向池中的同一個字符串。但若是字符串是可變的,那麼String interning將不能實現(String interning是指對不一樣的字符串僅僅只保存一個,即不會保存多個相同的字符串。),由於這樣的話,若是變量改變了它的值,那麼其它指向這個值的變量的值也會一塊兒改變。線程