1. 程式人生 > >String、StringBuilder、StringBuffer

String、StringBuilder、StringBuffer

目錄

String

String 是不可變的,定義之後不能再修改,看原始碼可知,內部結構是一個 final 型別的 char 陣列。

我們所說的字串變化了,是因為引用指向了新物件而已。

StringBuilder

StringBuilder 和 ArrayList 非常像,內部結構都是陣列,都支援動態擴容。

使用 append 方法拼接字串更加方便。

StringBuffer

StringBuffer 基本上和 StringBuilder 完全一樣。

明顯的不同就是 StringBuffer 是執行緒安全的,除了構造方法之外的所有方法都用了 synchronized 關鍵字修飾。

同步犧牲了效能,效能上要比 StringBuilder 差一些。

字串拼接

使用字串連線符+做字串拼接,每做一次拼接,就需要建立一個 StringBuilder 物件。(可以從反編譯程式碼中看出)

PS:String str = 'a' + 'b' + 'c'算作一次拼接。

在連續多次拼接的場景中,既消耗資源拼接速度又慢。(建立物件需要消耗資源與時間、擴容需要時間)

【原則很簡單】

拼接字串使用 StringBuilder 的 append 方法。

而且如果我們已經知道了字串容量,可以一次性分配一個 StringBuilder,避免擴容時候的開銷。