全面解釋java中StringBuilder、StringBuffer、String類之間的關係

1. String 類 

  String的值是不可變的,這就致使每次對String的操做都會生成新的String對象,不只效率低下,並且大量浪費有限的內存空間。 
String a = "a"; //假設a指向地址0x0001 
a = "b";//從新賦值後a指向地址0x0002,但0x0001地址中保存的"a"依舊存在,但已經再也不是a所指向的,a 已經指向了其它地址。 
所以String的操做都是改變賦值地址而不是改變值操做。 

2. StringBuffer是可變類,和線程安全的字符串操做類,任何對它指向的字符串的操做都不會產生新的對象。 每一個StringBuffer對象都有必定的緩衝區容量,當字符串大小沒有超過容量時,不會分配新的容量,當字符串大小超過容量時,會自動增長容量。 

StringBuffer buf=new StringBuffer(); //分配長16字節的字符緩衝區 
StringBuffer buf=new StringBuffer(512); //分配長512字節的字符緩衝區 
StringBuffer buf=new StringBuffer("this is a test")//在緩衝區中存放了字符串,並在後面預留了16字節的空緩衝區。 

3.StringBuffer 
  StringBuffer和StringBuilder類功能基本類似,主要區別在於StringBuffer類的方法是多線程、安全的,而StringBuilder不是線程安全的,相比而言,StringBuilder類會略微快一點。對於常常要改變值的字符串應該使用StringBuffer和StringBuilder類。 

4.線程安全 
StringBuffer 線程安全 
StringBuilder 線程不安全 

5.速度 
通常狀況下,速度從快到慢:StringBuilder>StringBuffer>String,這種比較是相對的,不是絕對的。 

6.總結 
(1).若是要操做少許的數據用 = String 
(2).單線程操做字符串緩衝區 下操做大量數據 = StringBuilder 
(3).多線程操做字符串緩衝區 下操做大量數據 = StringBuffer 安全

相關文章
相關標籤/搜索