1.StringBuilder和StringBuffer都继承了同一个类AbstractStringBuilder。
2两个的区别在于StringBuilder的安全性低但是性能高,StringBuffer的安全性高但是性能低。
3.两个类的扩容机制一样
StringBuilder:
public StringBuilder() {
super(16);
}
StringBuilder的无参构造方法调用了父类,初始长度为16。
public StringBuilder(String str) {
super(str.length() + 16);
append(str);
}
public StringBuilder(CharSequence seq) {
this(seq.length() + 16);
append(seq);
}
StringBuilder的有参构造方法,输入参数,初始长度为参数的长度+16。
我们在使用append()方法在字符串后面拼接字符串的时候,可能会出现长度不够的情况,会先用一个叫 ensureCapacityInternal 的方法判断需不需要扩容,如果长度超过了该字符串,就会进行扩容,需要扩容就调用expandCapacity方法进行扩容,扩容是从当前字符串进行扩容的,创建一个且存储更大的字符串空间,将旧的复制过去,扩容会将新容量的大小设为原大小的2倍+2的长度,如果长度还是不够的话,则直接扩充到需要的容量大小。