String 繼承於CharSequence,也就是說String也是CharSequence類型。
CharSequence是一個接口,它只包括length(), charAt(int index), subSequence(int start, int end)這幾個API接口。除了String實現了CharSequence以外,StringBuffer和StringBuilder也實現了 CharSequence接口。
須要說明的是,CharSequence就是字符序列,String, StringBuilder和StringBuffer本質上都是經過字符數組實現的!數組
CharSequence 是 char 值的一個可讀序列。此接口對許多不一樣種類的 char 序列提供統一的只讀訪問
(我的理解應該算得上是char類型得一個集合,是interface)
String 類表明字符串。Java 程序中的全部字符串字面值(如 "abc" )都做爲此類的實例來實現。ui
CharSequence是String實現的一個接口,至關簡單,就是要求是一串字符。因此每一個參數類型是CharSequence的方法,均可以實際代入String對象。
爲何這些方法不乾脆定義String做爲參數類型?由於還有其餘的CharSequence類型的類,好比StringBuffer和StringBuilder這兩個很重要的類。
String對象是不可變的,這兩個可變,因此咱們在構造字符串的過程當中每每要用到StringBuffer和StringBuilder。
若是那些方法定義String做爲參數類型,那麼就無法對它們用那些方法,先得轉化成String才能用。
但StringBuffer和StringBuilder轉換爲String再轉換過來很化時間的,用它們而不是直接用String的「加法」來構造新String原本就是爲了省時間,
因此若是用String做爲參數類型就杯具了。