Java中String、StringBuffer、StringBuilder區別

Java String 類——String字符串常量
       字符串廣泛應用 在Java 編程中,在 Java 中字符串屬於對象,Java 提供了 String 類來創建和操作字符串。需要注意的是,String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,這樣不僅效率低下,而且大量浪費有限的內存空間。我們來看一下這張對String操作時內存變化的圖:

StringBuffer 和 StringBuilder 類——StringBuffer、StringBuilder字符串變量

當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。

和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象。

StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。

由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的情況下,則必須使用 StringBuffer 類。


三者的繼承結構

三者的區別

(1)字符修改上的區別(主要)

String:不可變字符串;

StringBuffer:可變字符串、效率低、線程安全;

StringBuilder:可變字符序列、效率高、線程不安全;

小結

(1)如果要操作少量的數據用 String;

(2)多線程操作字符串緩衝區下操作大量數據 StringBuffer;

(3)單線程操作字符串緩衝區下操作大量數據 StringBuilder(推薦使用)

String     StringBuffer     StringBuilder
String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,不僅效率低下,而且浪費大量優先的內存空間    StringBuffer是可變類,和線程安全的字符串操作類,任何對它指向的字符串的操作都不會產生新的對象。 每個StringBuffer對象都有一定的緩衝區容量,當字符串大小沒有超過容量時,不會分配新的容量,當字符串大小超過容量時,會自動增加容量    可變類,速度更快
不可變     可變         可變
   線程安全       線程不安全
   多線程操作字符串     單線程操作字符串

 

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