Java之StringBuffer、StringBuilder、String的區別

1、String類
String類對象有兩種實例化方式:
直接賦值:開闢一塊堆內存空間,可以自動入池;
構造方法:開闢兩塊堆內存空間,不會自動入池,使用intern()手動入池;
任何一個字符串都是String類的匿名對象;
字符串一旦聲明則不可改變,可以改變的只是String類對象的引用。

2、StringBuffer
StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,所以是線程安全的。
 
3、StringBuilder
StringBuilder並沒有對方法進行加同步鎖,所以不是線程安全的,但效率高。

三者的區別:
StringBuffer和StringBuilder相對於String的區別是
String 每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。 而如果是使用 StringBuffer/StringBuilder 類則結果就不一樣了,每次結果都會對 StringBuffer/StringBuilder 對象本身進行操作,而不是生成 新的對象,再改變對象引用。

因而在對一個字符串循環賦值時,最好使用StringBuffer(線程安全)或StringBuilder,這樣可以節約內存,提高性能。

String在實例化之後,其內存空間的內容大小是不能夠被修改的;而StringBuffer是一個線程安全的可變字符序列,在實例化之後可以動態的修改堆內存中的內容,所以內存長度和大小是可變的;StringBuilder實例化之後內存大小長度也是可變的,不同之處在於StringBuilder不是線程同步,因此操作起來必然比StringBuffer更加高效。

使用的基本原則:
如果要操作少量的數據,用String ;單線程操作大量數據,用StringBuilder ;多線程操作大量數據,用StringBuffer。

參考:http://www.tuicool.com/articles/I3yama

發佈了44 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章