String
? 源碼

String類
?如上源碼,String被聲明成了final類,因此不能再繼承;實(shí)現(xiàn)了Serializable(序列化)、Comparable(比較)、CharSequence(字符序列)
- Serializable
?可序列化類的所有子類型本身可序列化。 序列化接口沒有方法或字段
并且僅用于識(shí)別可序列化的語義。 - Comparable
?Comparable接口對(duì)實(shí)現(xiàn)該接口的每個(gè)類的對(duì)象強(qiáng)加了總體排序。 此排序稱為類的自然排序。并且Comparable類的compareTo方法被稱為其自然比較方法可以通過Collections.so、Arrays.sort, 實(shí)現(xiàn)此接口的對(duì)象可以用作SortedMap排序圖中的鍵,也可以用作SortedSet排序集中的元素,而無需指定Comparator比較器。 - CharSequence
?CharSequence是char值的可讀序列。 這個(gè)接口提供對(duì)許多不同種類的char序列的統(tǒng)一只讀訪問。一個(gè)char值代表Basic中的Multilingual Plane(一個(gè)字符多語言平面BMP)或替代。
StringBuffer
? 源碼

StringBuffer
? StringBuffer也實(shí)現(xiàn)了Serializable、CharSequence,但它繼承了AbstractStringBuilder。
- AbstractStringBuilder
? AbstractStringBuilder可變的字符序列。實(shí)現(xiàn)可修改的字符串。字符的長度和內(nèi)容可以通過特定的方法調(diào)用來更改順序。
StringBuilder
? 源碼

StringBuilder
?StringBuilder的字符序列是可變的。 此類提供了與API兼容的使用StringBuffer,但不能保證同步。此類設(shè)計(jì)用于替代。StringBuffer在字符串緩沖區(qū)所在的位置由單個(gè)線程使用(通常是這種情況)。 在可能的情況,建議優(yōu)先使用此類。StringBuffer,因?yàn)樵诖蠖鄶?shù)實(shí)現(xiàn)中它將更快。
【敲黑板時(shí)間到】:
- 是否可變
?String是不可變的,StringBuffer與StringBuilder是可變的。
- 是否可變
- 是否線程安全
?String 中的對(duì)象是不可變的,可以理解為常量,是線程安全。AbstractStringBuilder 是 StringBuilder 與 StringBuffer 的公共父類,定義了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 對(duì)方法加了同步鎖或者對(duì)調(diào)用的方法加了同步鎖,所以是線程安全的。StringBuilder 并沒有對(duì)方法進(jìn)行加同步鎖,所以是非線程安全的。
- 是否線程安全
- 性能差異
?每次對(duì) String 類型進(jìn)行改變的時(shí)候,都會(huì)生成一個(gè)新的 String 對(duì)象,然后將指針指向新的 String 對(duì)象。StringBuffer 每次都會(huì)對(duì) StringBuffer 對(duì)象本身進(jìn)行操作,而不是生成新的對(duì)象并改變對(duì)象引用。相同情況下使用 StringBuilder 相比使用 StringBuffer 僅能獲得 10%~15% 左右的性能提升,但卻要冒多線程不安全的風(fēng)險(xiǎn)
- 性能差異
【怎么使用】
? - 操作少量的數(shù)據(jù): 適用String
? - 單線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù): 適用StringBuilder
? - 多線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù): 適用StringBuffer
