String与StringBuilder辨析

            首先要知道String是一个不可变字符串类型,StringBuilder是一个可变字符串类型,StringBuilder的可变机制是字符串扩容。StringBuilder最先指定长度是17,一旦超过这个长度,StringBuilder便会生成另一个数组而且长度是上一个数组的2倍+2。

Eclipse:源码如下图


append()函数里有ensureCapacityInternal()函数判断是否超过最大长度


ensureCapacityInternal()判断若是超过则用expandCapacity()扩展数组长度


把长度延伸为value.length*2+2,使用copyOf()函数扩展


由于定长数组长度不可扩展所以便申请一个新数组把旧数组里的value值赋值给新数组

所以数组扩容的原理就是申请新数组替换旧数组。

猜你喜欢

转载自blog.csdn.net/liu_fangyuan/article/details/79563831