1、可變性
String對數(shù)據(jù)的保存是通過字符數(shù)組存儲,但是該數(shù)組使用了“final”進(jìn)行修飾,所以是不可變的;String中定義:private final charvalue[];
StringBuilder和StringBuffer都是集成于AbstractStringBuilder,AbstractStringBuilder中對數(shù)據(jù)的保存也是通過字符數(shù)組進(jìn)行保存的,但是沒有進(jìn)行"final"修飾,所以是可變的;AbstractStringBuilder中定義:char[]value;
2、安全性
String的數(shù)組是不可變得,可以理解成常量,所以是線程安全的;
AbstractStringBuilder中的數(shù)組是可變的,但是StringBuffer中方法使用了同步鎖,因此也是線程安全的。而StringBuilder則是線程不安全的;
StringBuffer中方法如下:
@Override
public synchronizedStringBufferappend(Object obj) {
toStringCache=null;
super.append(String.valueOf(obj));
return this;
}
3、StringBuilder與StringBuffer的共同點(diǎn)
兩者有共同的父類,所以他們有共同的父類方法,只是StringBuffer針對父類方法添加了同步鎖;
單線程使用StringBuilder效率要高于StringBuffer;