StringBuffer、StringBuilder都继承于AbstractStringBuilder
其中,StringBuffer是线程安全的,StringBuilder是线程不安全的。
JDK 11源码
下图为AbstractStringBuilder中扩容源码(JDK 11):
重要变量释义:
minCapacity:append操作后当前的 byte[]数组的length
oldCapacity:当前byte[]数组的容量(初始大小为16)。
newCapacity:新的容量对oldCapacity右移1位再加2
注:当length超过了byte[]数组的容量就进行扩容
位运算
JDK 11版本扩容源码使用"位运算"进行newCapacity的计算
例子:
以初始容量16为例;10000(16的二进制)右移1位 100000
再加2,2的二进制为10 相加后为100010 转换为十进制就是34