SpringBuilder和StringBuffer原始碼解析
阿新 • • 發佈:2019-03-29
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一個字串。