StringBuilder.Capacity 扩容机制探究

    StringBuilder的容量怎么进行扩容这个问题在网上找了好多,有说是双倍扩容的有说只双倍扩容一次的,总说纷纭,我今天就进行了一个实验。

     不多少上代码:

     代码一:

     

    输出结果:

    

     代码二: 

     

    输出结果: 

    

    看到输出结果这个StringBuilder添加了17个元素,StringBuilder的容量确实得到了2倍的扩容

   代码三:

   

   输出结果:

   

   如果按照这代码上来说它确实只扩容了一次,但是咱们只添加了一次元素,这个时候如果我们在下面在添加一个元素'

   

  输出结果:

   

   现在看输出结果就又双倍扩容了。通过这几个例子,我发现如果只添加一次,并且超出了容量的2倍也就是32,的话StringBuilder的容量就是 StringBuilder的长度。也就是说StringBuilder添加一次执行一次Append()方法只会进行一次2倍容量的扩容,如果它的实际长度比容量要大的话,它的实际长度就是它的容量。

    

    

     这个例子就证实了我们的结论,每调用Append()方法只能进行一次扩容。

      进过我查证源码发现,它Append()在执行的时候会判断添加的元素之前会判断现在的容量是否已满,已满的话会进行一次双倍扩容,当然不管你添加多少元素它只扩容一次,在添加完成之后,容量会和实际数量进行判断,实际数量大于容量容量就等于实际容量,当然前提是你没有设置StringBuilder的最大容量。

       好了就到这里把! 也请各路大神指正!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值