SpringBuilder和StringBuffer源码解析

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

SpringBuilder和StringBuffer源码解析_第1张图片

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

SpringBuilder和StringBuffer源码解析_第2张图片

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

SpringBuilder和StringBuffer源码解析_第3张图片

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

SpringBuilder和StringBuffer源码解析_第4张图片

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

SpringBuilder和StringBuffer源码解析_第5张图片

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

SpringBuilder和StringBuffer源码解析_第6张图片

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

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

SpringBuilder和StringBuffer源码解析_第7张图片

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

SpringBuilder和StringBuffer源码解析_第8张图片

 

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

你可能感兴趣的:(SpringBuilder和StringBuffer源码解析)