淺談String,StringBuffer,StringBuilder

**

三者主要的區別在於運行速度和線程安全

**
一.運行速度
StringBuilder>StringBuffer>String
原因:String爲字符串常量,StringBuffer和StringBuilder均爲字符串變量,String一旦創建是不可更改的,而後兩者對象是變量,是可以更改的。

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

這段代碼JVM(java虛擬機)首先創建一個String對象string1,將abc賦值給string1,在第三行中又會創建一個新的String對象,然後再把原來的string1的值和“de”加起來再賦值給新的string1,而原來的string1就會被JVM的垃圾回收機制(GC)給回收掉了,所以,string1實際上並沒有被更改,也就是前面說的String對象一旦創建之後就不可更改了。所以,Java中對String對象進行的操作實際上是一個不斷創建新的對象並且將舊的對象回收的一個過程,所以執行速度很慢。
而StringBuffer和StringBuilder在該變量上直接修改,不進行創建和回收的操作,所以速度比String快。
二.線程安全
StringBuffer爲線程安全的,StringBuilder線程不安全。
 如果一個StringBuffer對象在字符串緩衝區被多個線程使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證線程是安全的,但StringBuilder的方法則沒有該關鍵字,所以不能保證線程安全,有可能會出現一些錯誤的操作。所以如果要進行的操作是多線程的,那麼就要使用StringBuffer,但是在單線程的情況下,還是建議使用速度比較快的StringBuilder。
三.總結
**String:適用於少量字符串操作
StringBuffer:適用多線程下在字符緩衝區進行大量操作
StringBuilder:適用於單線程下在字符緩衝區進行大量操作**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章