SpringBuilder和StringBuffer源码解析

StringBuilder和StringBuffer都是继承自AbstractStringBuilder,只不过StringBuffer是线程安全的,使用synchronized关键字同步方法。

2d70789304fe5798d3bd8e67ff9196dcb06.jpg

StringBuilder和StringBuffer操作的都是AbstractStringBuilder类中的char数组。

624cc1dac3e3226a560e1270feea518716b.jpg

StringBuilder和StringBuffer的默认初始容量是16。

e4932a5f848cffe1eb2221e77fa20da85eb.jpg

当使用append方法进行字符串拼接时,主要是对char数组的复制,同时要确保capacity的容量满足拼接的字符串大小。

57fb435224ae4b7fab48e149ebe49b3722f.jpg

ensureCapacityInternal方法会确保当前的char数组value够用,然后,会将字符串复制到char数组value中,同时count加上新增字符串的长度。

44fd435cc604ef68b45e18d74322ccb5253.jpg

如果不够用就就重新复制一个数组。

1cdc179b599f783ef0250cfe7c00b186bb7.jpg

新数组的容量,首先会将当前value容量翻倍再加2,如果还不够用就用minCapacity,返回新容量大小时,会判断有没有超过(Integer.MAX_VALUE - 8 = MAX_ARRAY_SIZE)。

最好比较一下toString方法,StringBuffer的toString会将value再复制到toStringCache一个char数组中,然后new一个字符串。

fe5fb9a862bad90e00c672678035a8a6677.jpg

StringBuilder简单了,直接new一个字符串。

e073f743aec63b21b33a953d47c2e381404.jpg

 

转载于:https://my.oschina.net/u/118686/blog/3029930

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值