StringBuffer类型的对象是自动扩充机制是怎样的?

 1、请看一下程序段:

//初始化一个StringBuffer对象并设置容量为3
StringBuffer strBuf1=new StringBuffer(3);
String addStr="1234";//添加字符串

//打印原始容量
System.out.println("原始容量为:"+strBuf1.capacity());

//添加一个长度为 4 的字符串到strBuf中
strBuf1.append(addStr);
/**
* 由于我们初始化的strBuf对象的容量为3,而添加的数据长度为4,
* 所以此处就会自动扩充容量,那么自动扩充后的容量值是多少呢?
* 是4吗?
*/

System.out.println("添加字符串"+addStr+"后容量为:"+strBuf1.capacity());
      

输出结果:

  显然输出结果显示自动扩充后容量为:8,而非我们猜想的4。这是为什么?

 2、将添加内容长度变为5后再次测试

String addStr="12345";//添加字符串

 输出结果:

测试结果可知容量依旧还是扩充为8

3、下面我们依次将容量增加1进行多次测试

 

由以上结果可知,在添加的字符串长度(addStr.length)3<addStr.length<=8的时候,自动扩充的容量都为8,也就是原始容量3的2倍还多2;

4、那如果我们把字符串长度增加到9呢?容量会扩充到多少?我们看下面的测试结果 

 经过分析以上测试结果我们可知:

 1)当添加的字符串长度大于3,并且小于等于8的时候,扩充后的容量都是8

公式表示:初始容量<添加字符串长度<=(初始容量*2+2 )成立时,

                             扩充容量=初始容量*2+2

2)当添加的字符串长度大于8时,扩充后的容量就是当前添加的字符串长度

公式表示:添加字符串长度>(初始容量*2+2)成立时,

                               扩充容量=添加字符串长度

方便理解我们使用if语句表示就是

/*

addStr.length=添加字符串长度

 startCapatity=初始容量

extendCapacity=扩充容量
*/

if((startCapatity<addStr.length)&&(addStr.length<=(addStr.length*2+2)){
    //如果[添加的字符串长度]大于[初始容量],并且小于等于[初始容量*2+2]
    //那么容量就会扩充为[初始容量*2+2]
}else if(addStr.length>(startCapatity*2+2)){
        //如果[添加字符串长度]大于[初始容量*2+2]
        //那么容量就会扩充为[添加字符串长度]
    }

5、验证

下面我们将代码初始容量修改为5,添加字符串长度修改为8后测试结果

根据公式可知容量应该为5*2+2=12

 结果显示计算正确,所以也验证了公式的正确

 然后再将字符串长度修改为15后测试结果

 

 字符串长度15>5*2+2,所以容量会自动扩展为15

结论总结

如果初始容量无法容纳,那么容量将会扩充为2倍+2;如果容量还是不够,那么会直接扩充到所需容量

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值