1. 程式人生 > >java編碼ABC(二)String,StringBuilder,StringBuffer三者的區別

java編碼ABC(二)String,StringBuilder,StringBuffer三者的區別

簡單概述
1、String定義固定的字串變數
2、StringBuilder,StringBuffer定義需要不斷修改的字串變數;
3、StringBuffer執行緒安全

具體說明
1、String

1 String str="abc";
2 System.out.println(str);
3 str=str+"de";
4 System.out.println(str);

如果執行這段程式碼會發現先輸出“abc”,然後又輸出“abcde”,好像是str這個物件被更改了,其實,這只是一種假象罷了,JVM對於這幾行程式碼是這樣處理的,首先建立一個String物件str,並把“abc”賦值給str,然後在第三行中,其實JVM又建立了一個新的物件也名為str,然後再把原來的str的值和“de”加起來再賦值給新的str,而原來的str就會被JVM的垃圾回收機制(GC)給回收掉了,所以,str實際上並沒有被更改,也就是前面說的String物件一旦建立之後就不可更改了。所以,Java中對String物件進行的操作實際上是一個不斷建立新的物件並且將舊的物件回收的一個過程,所以執行速度很慢。
2、StringBuilder

StringBuilder stringBuilder=
   new StringBuilder().append("abc").append("de");

定義一個可以修改的變數
3、StringBuffer
StringBuilder是執行緒不安全的,而StringBuffer是執行緒安全的
如果一個StringBuffer物件在字串緩衝區被多個執行緒使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證執行緒是安全的,但StringBuilder的方法則沒有該關鍵字,所以不能保證執行緒安全,有可能會出現一些錯誤的操作。所以如果要進行的操作是多執行緒的,那麼就要使用StringBuffer,但是在單執行緒的情況下,還是建議使用速度比較快的StringBuilder。

參考:
Java中的String,StringBuilder,StringBuffer三者的區別