1,從運作速度來講
StringBuilder > StringBuffer > String
String為字元常量,StringBuilder與StringBuffer為字元變量,String一對定義長度不可變,StringBuilder與StringBuffer是變量,長度可變。
如:
String str = "abc";
System.out.println(str);
str += "def";
System.out.println(str);
第一個輸出abc,第二個輸出abcdef,給我們的感覺 好像對象被改變了,實際上JVM首先建立一個String對象str,并把“abc”指派給str,然後JVM又建立一個新的對象名字也是str,然後把str的值和“def”加起來再指派給新的str,而原來的str就會被JVM垃圾回收機制GC回收掉(str指向第第三個記憶體空間)。
2,線程安全
StringBuilder比StringBuffer速度要快,但StringBuilder是線程不安全的,而StringBuffer是線程安全的。
如果一個StringBuffer對象在字元串緩沖區被多個線程使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,是以可以保證線程是安全的,但StringBuilder的方法則沒有該關鍵字,是以不能保證線程安全,有可能會出現一些錯誤的操作。
3,總結
String:适用于少量的字元串操作的情況。
StringBuilder:适用于單線程下在字元緩沖區進行大量操作的情況。
StringBuffer:适用多線程下在字元緩沖區進行大量操作的情況。