天天看點

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

http://www.jb51.net/article/33398.htm

String的值是不可變的,這就導緻每次對String的操作都會生成新的String對象,不僅效率低下,而且大量浪費有限的記憶體空間,StringBuffer是可變類,和線程安全的字元串操作類,任何對它指向的字元串的操作都不會産生新的對象,StringBuffer和StringBuilder類功能基本相似

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位元組的字元緩沖區 

buf=new StringBuffer(512); //配置設定長512位元組的字元緩沖區 

buf=new StringBuffer("this is a

test")//在緩沖區中存放了字元串,并在後面預留了16位元組的空緩沖區。 

3.StringBuffer 

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

4.線程安全 

線程安全 

StringBuilder

線程不安全 

5.速度 

一般情況下,速度從快到慢:StringBuilder>StringBuffer>String,這種比較是相對的,不是絕對的。 

6.總結 

(1).如果要操作少量的資料用

= String 

(2).單線程操作字元串緩沖區 下操作大量資料 =

StringBuilder 

(3).多線程操作字元串緩沖區 下操作大量資料 =

StringBuffer