StringBuilder和StringBuffer都是繼承自AbstractStringBuilder,只不過StringBuffer是線程安全的,使用synchronized關鍵字同步方法。數組
StringBuilder和StringBuffer操做的都是AbstractStringBuilder類中的char數組。安全
StringBuilder和StringBuffer的默認初始容量是16。app
當使用append方法進行字符串拼接時,主要是對char數組的複製,同時要確保capacity的容量知足拼接的字符串大小。ui
ensureCapacityInternal方法會確保當前的char數組value夠用,而後,會將字符串複製到char數組value中,同時count加上新增字符串的長度。線程
若是不夠用就就從新複製一個數組。3d
新數組的容量,首先會將當前value容量翻倍再加2,若是還不夠用就用minCapacity,返回新容量大小時,會判斷有沒有超過(Integer.MAX_VALUE - 8 = MAX_ARRAY_SIZE)。blog
最比如較一下toString方法,StringBuffer的toString會將value再複製到toStringCache一個char數組中,而後new一個字符串。繼承
StringBuilder簡單了,直接new一個字符串。ci