StringBuilder和StringBuffer都是继承自AbstractStringBuilder,只不过StringBuffer是线程安全的,使用synchronized关键字同步方法。数组
StringBuilder和StringBuffer操做的都是AbstractStringBuilder类中的char数组。安全
StringBuilder和StringBuffer的默认初始容量是16。app
当使用append方法进行字符串拼接时,主要是对char数组的复制,同时要确保capacity的容量知足拼接的字符串大小。ui
ensureCapacityInternal方法会确保当前的char数组value够用,而后,会将字符串复制到char数组value中,同时count加上新增字符串的长度。线程
若是不够用就就从新复制一个数组。3d
新数组的容量,首先会将当前value容量翻倍再加2,若是还不够用就用minCapacity,返回新容量大小时,会判断有没有超过(Integer.MAX_VALUE - 8 = MAX_ARRAY_SIZE)。blog
最比如较一下toString方法,StringBuffer的toString会将value再复制到toStringCache一个char数组中,而后new一个字符串。继承
StringBuilder简单了,直接new一个字符串。ci