這篇文章主要介紹了java 中String和StringBuffer與StringBuilder的區別及使用方法的相關資料,在開發過程中經常會用到String 這個類別進行操作,需要的朋友可以參考下
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 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類別。
1)首先String、StringBuffer、StringBuilder在JDK中都被定義為final類,這表示他們不可以被繼承。
2)String最常見,與StringBuffer相比,String的效能較差,因為對String類型改變的時候都會重新產生一個新的String對象,這在字串拼接操作時很明顯,因此內容經常改變的字串不應該使用String,如果不考慮多線程,則應使用StringBuilder。
3)StringBuffer產生一個物件後,在進行字串拼接操作時,呼叫append方法即可,不會產生新的對象,僅對物件本身進行操作,效能比String要高。另外StringBuffer是線程安全的,因此適合在多線程中使用,也正因為如此,速度跟StringBuilder相比會比較慢。
4)StringBuilder的使用方法跟StringBuffer類似,但其是非線程安全的,因此一般常用於單線程,效率比StringBuffer高。
綜上所述,選擇哪一個,需要從記憶體效能、執行緒安全、執行效率等多方面考慮,從上面的幾個對比可以得到答案。
以上是Java中String與StringBuffer以及StringBuilder的使用差異詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!