1. 程式人生 > >SpringBuilder和StringBuffer原始碼解析

SpringBuilder和StringBuffer原始碼解析

開發十年,就只剩下這套架構體系了! >>>   

StringBuilder和StringBuffer都是繼承自AbstractStringBuilder,只不過StringBuffer是執行緒安全的,使用synchronized關鍵字同步方法。

StringBuilder和StringBuffer操作的都是AbstractStringBuilder類中的char陣列。

StringBuilder和StringBuffer的預設初始容量是16。

當使用append方法進行字串拼接時,主要是對char陣列的複製,同時要確保capacity的容量滿足拼接的字串大小。

ensureCapacityInternal方法會確保當前的char陣列value夠用,然後,會將字串複製到char陣列value中,同時count加上新增字串的長度。

如果不夠用就就重新複製一個數組。

新陣列的容量,首先會將當前value容量翻倍再加2,如果還不夠用就用minCapacity,返回新容量大小時,會判斷有沒有超過(Integer.MAX_VALUE - 8 = MAX_ARRAY_SIZE)。

最好比較一下toString方法,StringBuffer的toString會將value再複製到toStringCache一個char陣列中,然後new一個字串。

StringBuilder簡單了,直接new一個字串。