String StringBuffer StringBuilder區別

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 三者性能爲低-中-高性能

相關文章
相關標籤/搜索