String:若是短字符拼接的话效率是最高的,例如 String a="a"+"b"+"c";编译器会翻译成String a ="abc"数组
可是若是是String a = "a";安全
String b = "b";app
String c = "c";ui
String d = a + b +c;的话不如StringBuffer,由于底层实现就是建立StringBuffer来进行append.spa
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(源数组, 起始位置, 截取长度)
最后,StringBuffer和StringBuilder继承AbstractStringBuilder,并不是继承String