String:如果短字符拼接的话效率是最高的,例如 String a="a"+"b"+"c";编译器会翻译成String a ="abc"
但是如果是String a = "a";
String b = "b";
String c = "c";
String d = a + b +c;的话不如StringBuffer,因为底层实现就是创建StringBuffer来进行append.
String是不可变得,原因在于 private final char value[]; 初始化是final.
StringBuffer是线程安全的,原因在于其append方法,delete方法、replace方法等都是由synchronized修饰.
StringBuilder并没有synchronized修饰方法,所以是线程不安全的.
另外StringBuffer、StringBuilder初始化为16长度
super(16);
扩容是2倍原长度+2
append方法,delete方法、replace方法等对字符变化最终都调用Ssytem.arraycopy(源数组,源数组起始位置,目的数组,目的数组起始位置,复制长度)
subString和String没区别,因为最后是new String(源数组, 起始位置, 截取长度)