解答
首先我们需要知道StringBuffer和StringBuilder类都继承了抽象类AbstractStringBuilder类;
源码都调用父类来进行初始化:
StringBuffer(String s)的初始化:
扩容算法:
使用append()方法在字符串后面追加值的时候,如果长度超过了该字符串存储空间大小了就需要进行扩容:构建新的并且存储空间更大的字符串,将旧的复制过去;
在进行字符串append添加的时候,会先计算添加后字符串大小,传入一个方法:ensureCapacityInternal 这个方法进行是否扩容的判断,需要扩容就调用expandCapacity方法进行扩容:
尝试将新容量扩为原大小的2倍+2(加2是因为拼接字符串通常末尾都会有个多余的字符),如果扩充后的容量还是不够,则直接扩充到需要的容量大小。
例子:
帖子还没人回复快来抢沙发