String 字符串類,經常使用來定義常量或者不須要動態擴展的變量,由於它是一個不可變的字符串數組,java
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 }
若是要常用「+」來修改變量的值,每作一次 + 就產生個 StringBuilder 對象,而後 append 後toString輸出,接着就扔掉StringBuilder對象,屢次"+"操做就會產生屢次對象產生和銷燬的開銷,效率低下。
數組
StringBuffer 和StringBuilder都繼承AbstractStringBuilder,這裏面定義的字符串數組是非final的,說明是可變的,能夠經過append等方式動態擴展安全
可是二者又是有區別的,StringBuffer的線程安全的,如:多線程
@Override public synchronized StringBuffer append(Object obj) { toStringCache = null; super.append(String.valueOf(obj)); return this; }
其操做數組的方法都是使用了同步操做的。app
而StringBuilder是非線程安全的,因此在多線程環境使用StringBuffer,其餘時候使用StringBuilder線程更高一些。ide
String StringBuffer StringBuilder 三者性能爲低-中-高性能