java 中String和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對象都有一定的緩衝區容量,當字符串大小沒有超過容量時,不會分配新的容量,當字符串大小超過容量時,會自動增加容量。

3.StringBuffer

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

總結

1)首先String、StringBuffer、StringBuilder在JDK中都被定義爲final類,這意味着他們不可以被繼承。
2)String最常見,與StringBuffer相比,String的性能較差,因爲對String類型進行改變的時候都會重新生成一個新的String對象,這在字符串拼接操作時很明顯,因此內容經常改變的字符串不應該使用String,如果不考慮多線程,則應使用StringBuilder。
3)StringBuffer生成一個對象後,在進行字符串拼接操作時,調用append方法即可,不會產生新的對象,僅對對象本身進行操作,性能比String要高。另外StringBuffer是線程安全的,因此適合在多線程中使用,也正因爲如此,速度跟StringBuilder相比會比較慢。
4)StringBuilder的使用方法跟StringBuffer類似,但其是非線程安全的,因此一般常用於單線程,效率比StringBuffer高。
綜上所述,選擇哪個,需要從內存性能、線程安全、執行效率等多方面考慮,從上面的幾條對比中可以得出答案。

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