String,StringBuilder和StringBuffer有啥不一樣

java中用於字符串處理的常用類有三個: String,StringBuffer和StringBuilder,那麼三者有什麼異同呢?

1.相同點:

都是final類,不允許被繼承。這主要是從安全性上考慮防止繼承後某些參數被修改。

2.不同點:

線程安全:
StringBuffer是線程安全的,而StringBuilder是線程不安全的,因爲 StringBuffer的方法都是被synchronized修飾的,而StringBuilder的方法沒有synchronized修飾關鍵字。

StringBuffer代碼段:

@Override
    public synchronized int length() {
        return count;
    }
    @Override
    public synchronized int capacity() {
        return value.length;
    }

StringBuilder代碼段:

@Override
    public StringBuilder append(Object obj) {
        return append(String.valueOf(obj));
    }
    @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }

性能:
執行速度:StringBuilder > StringBuffer > String
String爲字符串常量,所以String類的操作會涉及到大量的對象拷貝。StringBuilder和StringBuffer均爲字符串變量因此可以規避這個問題。
StringBuilder 沒有對方法加鎖,所以StringBuilder的性能要好於StringBuffer。

3.應用場景:

1.String適用於少量的字符串操作的場景。
2.StringBuilder適用於單線程下大量字符串操作的場景。
3.StringBuffer適用多線程下大量字符串操作的場景。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章