StringBuffer与StringBuilder
- StringBuffer和StringBuilder都是继承自AbstractStringBuilder
- 它们两个的区别在于StringBuffer是线程安全的但效率低,StringBuilder是线程不安全的但高效。
- StringBuffer和StringBuilder的扩容机制是一样的,因此分析一个即可,下面以StringBuffer为例。
StringBuffer与StringBuilder扩容机制
StringBuffer 的无参构造初始容量为:16,下图为无参构造的源码
StringBuffer 的有参构造初始容量为:字符串参数的长度+16
有参和无参扩容方法都一样的。都是从当前容量开始扩容
- 一次追加长度超过当前容量,则会按照 当前容量*2+2 扩容一次
- 一次追加长度不仅超过初始容量,而且按照 当前容量*2+2 扩容一次也不够,其容量会直接扩容到与所添加的字符串长度相等的长度。之后再追加的话,还会按照 当前容量*2+2进行扩容