new StringBuilder() VS new StringBuilder(arg)

StringBuilder,非线程安全的,避免作为类变量存储信息。


//1.
StringBuilder sb_1=new StringBuilder(); //内部的字符数组长度默认为16
sb_1.append("0123456789"); //此时内部的字符数组的长度仍然是16 , 未利用空间为6
sb_1.append("abcdef");//此时内部的字符数组的长度仍然是16, 未利用空间为0
sb_1.append("N");//此时内部的字符数组的长度是34,34=(16+1)*2 , 未利用空间为17
sb_1.append("0123456789abcdefN1");//此时内部的字符数组的长度是70,70=(34+1)*2,未利用空间为35

//2.
StringBuilder sb_2=new StringBuilder("0123456789");//内部的字符数组长度=构造器内参数.length()+16,这里为26, 未利用空间为16
sb_2.append("abcdef"); //此时内部的字符数组长度未变,为26, 未利用空间为10
sb_2.append("N");//此时内部的字符数组长度仍然是26, 未利用空间为9
sb_2.append("0123456789abcdefN1");//此时内部的字符数组的长度是54,54=(26+1)*2,未利用空间为19

/**
* 第一种方式,再追加长度为35的字符串时,内部的字符数组长度不变,仍为70,未利用空间为0.
* 第二种方式,再追加长度为35的字符串时,内部的字符数组长度变为110,未利用空间为40.
*
* 第一种方式,继续追加长度为1的字符串时,内部的字符数组长度变为142,未利用空间为71.
* 第二种方式,继续追加长度为1的字符串时,内部的字符数组长度变为110,未利用空间为39.
*
* 未利用空间对比如下:
* 6<-->16, 0<-->10, 17<-->9, 35<-->19, 0<-->40, 19<-->39
* 前者比上后者,小于0.5的可能性较大,大于2的可能性较小。
* 没有采用多次随机的方式演练,但是:
* 在拼接更长的字符串时,且目标字符串长度未知的情况下,
* 若采用第二种方式,内部的字符数组长度的递增速度更快. 可能会浪费更多的空间.
* 所以建议使用new StringBuilder();
* (win32, jdk5)
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值