StringBuffer类能够建立可修改的字符串序列。该类有StringBuffer(),StringBuffer(int size),StringBuffer(String s)三个改造方法。算法
1.StringBuffer()的初始容量能够容纳16个字符,当该对象的实体存放的字符的长度大于16时,实体容量就自动增长。StringBuffer对象能够经过length()方法获取实体中存放的字符序列长度,经过capacity()方法来获取当前实体的实际容量。app
2.StringBuffer(int size)能够指定分配给该对象的实体的初始容量参数为参数size指定的字符个数。当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量就自动的增长。以便存放所增长的字符。ui
3.StringBuffer(String s)能够指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列长度大于size个字符时,实体的容量自动的增长,以便存放所增长的字符。对象
首先咱们须要知道StringBuffer和StringBuilder类都继承了抽象类AbstractStringBuilder类; 源码都调用父类来进行初始化:继承
使用append()方法在字符串后面追加东西的时候,若是长度超过了该字符串存储空间大小了就须要进行扩容:构建新的存储空间更大的字符串,将久的复制过去;再进行字符串append添加的时候,会先计算添加后字符串大小,传入一个方法:ensureCapacityInternal 这个方法进行是否扩容的判断,须要扩容就调用expandCapacity方法进行扩容:图片
尝试将新容量扩为大小变成2倍+2 if 判断一下 容量若是不够,直接扩充到须要的容量大小。ci