String、StringBuffer、StringBuilder三者的异同
相同点:底层使用char[]存储
不同点
-
String为不可变的字符序列
-
StringBuffer可变的字符序列,线程安全,比StringBuilder效率低。默认开辟大小为16的空间,需要扩容时扩容为原来的2倍加2
-
StringBuilder可变的字符序列,jdk5.0新增,线程不安全,效率高
StringBuilder和StringBuffer的容量
int newCapacity = (value.length << 1) + 2; // 扩容底层代码
不指定大小时的容量为16
public StringBuffer() {
super(16);
}
三者的效率问题:StringBuilder>StringBuffer>String