StringBuilder的容量怎么进行扩容这个问题在网上找了好多,有说是双倍扩容的有说只双倍扩容一次的,总说纷纭,我今天就进行了一个实验。
不多少上代码:
代码一:
输出结果:
代码二:
输出结果:
看到输出结果这个StringBuilder添加了17个元素,StringBuilder的容量确实得到了2倍的扩容
代码三:
输出结果:
如果按照这代码上来说它确实只扩容了一次,但是咱们只添加了一次元素,这个时候如果我们在下面在添加一个元素'
输出结果:
现在看输出结果就又双倍扩容了。通过这几个例子,我发现如果只添加一次,并且超出了容量的2倍也就是32,的话StringBuilder的容量就是 StringBuilder的长度。也就是说StringBuilder添加一次执行一次Append()方法只会进行一次2倍容量的扩容,如果它的实际长度比容量要大的话,它的实际长度就是它的容量。
这个例子就证实了我们的结论,每调用Append()方法只能进行一次扩容。
进过我查证源码发现,它Append()在执行的时候会判断添加的元素之前会判断现在的容量是否已满,已满的话会进行一次双倍扩容,当然不管你添加多少元素它只扩容一次,在添加完成之后,容量会和实际数量进行判断,实际数量大于容量容量就等于实际容量,当然前提是你没有设置StringBuilder的最大容量。
好了就到这里把! 也请各路大神指正!!