StringBuffer的容量capacity()问题

扩容公式:扩容后的容量为前一个容量的2倍+2(字符序列的长度不超过此范围的情况下才适用);

第一种,初始字符序列作为参数时

那么对象实体的初始容量为参数的字符序列的长度再加16;

代码及运行结果如下:

它接下来再追加字符序列的扩容问题和接下来的情况是一样的,往下看就可以了。

第二种StringBuffer构造方法无参时:

对象实体的初始容量为16(相当于原字符序列长度为0+16)。

追加字符序列后字符序列的长度不超过它原来的容量的大小时,不会扩容

追加字符序列后字符序列的长度超过了它的原容量大小,但不超过扩容公式计算结果的容量大小时,容量为扩容公式计算出的容量大小

代码及运行结果如下:

追加字符序列后字符序列的长度超过了原容量的大小且超过了扩容公式计算出的容量大小,那么对象实体的容量的大小就直接是追加后字符序列的长度(扩容公式不适用了!!!)。

代码及运行结果如下:

第一次调用append()方法时,当字符序列的长度不超过16时,它的初始容量是16;当字符序列长度是17时,它的容量是34;而超过34时,它的容量就直接为字符序列的长度了(扩容公式不适用了)。

分析一下:首先还没调用append()方法时,它的初始容量为16,然后第一次调用append()追加了字符序列:若添加的长度在16以内(原容量范围内),不会扩容;若添加的长度在16~34以内(原容量~扩容公式计算的范围),那么容量的大小为扩容公式计算出的容量大小;若添加的长度大于34,那么已经超过了扩容公式的计算范围,这时的容量大小就直接为字符序列的长度。

第一次调用append()方法的三种情况代码及运行结果如下:

 

------------分割线一条------------

 

 ------------分割线一条------------

 第三种trimToSize()减容:

trimToSize()方法是将容量减小为字符序列的长度。那么将此方法放到创建完对象后的第一条语句,那么此时的对象实体容量为0。接下来第一次调用append()方法追加字符序列时,容量大小为字符序列的长度。而后面再继续调用append()方法时,与前面分析的情况相同。

代码及运行结果如下:

     这个问题的情况稍微有点多,但其实没那么重要,如果不想让StringBuffer对象的容量占用内存空间,那只要每次调用append()方法追加完字符序列后再调用trimToSize()方法,就可以把容量减小为你的字符序列长度了。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值