首先要知道String是一个不可变字符串类型,StringBuilder是一个可变字符串类型,StringBuilder的可变机制是字符串扩容。StringBuilder最先指定长度是17,一旦超过这个长度,StringBuilder便会生成另一个数组而且长度是上一个数组的2倍+2。
Eclipse:源码如下图
append()函数里有ensureCapacityInternal()函数判断是否超过最大长度
ensureCapacityInternal()判断若是超过则用expandCapacity()扩展数组长度
把长度延伸为value.length*2+2,使用copyOf()函数扩展
由于定长数组长度不可扩展所以便申请一个新数组把旧数组里的value值赋值给新数组
所以数组扩容的原理就是申请新数组替换旧数组。