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