天天看點

java中String,StringBuffer,StringBuilder的差別

1,從運作速度來講

         StringBuilder  >  StringBuffer  > String 

       String為字元常量,StringBuilder與StringBuffer為字元變量,String一對定義長度不可變,StringBuilder與StringBuffer是變量,長度可變。

如:

String str = "abc";
System.out.println(str);
str += "def";
System.out.println(str);
           
java中String,StringBuffer,StringBuilder的差別

第一個輸出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:适用多線程下在字元緩沖區進行大量操作的情況。