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適用多線程下大量字符串操作的場景。