String與StringBuffer的區別
JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。
String類表示內容不可改變的字串 。
StringBuffer類表示內容可以被修改的字串 。
1.當你知道字元資料要改變的時候就可以使用StringBuffer,也可以使用StringBuffers來動態構造字元資料。
2.String實現了equals方法,new String(“abc”).equals(new String(“abc”) 的結果為true,而StringBuffer沒有實現equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”) 的結果為false。
舉一個具體的例子來說明,我們要把1到100的所有數字拼起來,組成一個串。
StringBuffer sbf = new StringBuffer(); for(int i=0;i<100;i++) { sbf.append(i); }
上面的程式碼效率很高,因為只建立了一個StringBuffer物件,而下面的程式碼效率很低,因為建立了101個物件。
String str = new String(); for(int i=0;i<100;i++) { str = str + i; }
3.String覆蓋了equals方法和hashCode方法,而StringBuffer沒有覆蓋equals方法和hashCode方法,所以,將StringBuffer物件儲存進Java集合類中時會出現問題。
StringBuffer與StringBuilder的區別
StringBuffer和StringBuilder類都表示內容可以被修改的字串,StringBuilder是執行緒不安全的 ,執行效率高,StringBuffer是執行緒安全的 ,執行效率相對較低。如果一個字串變數是在方法裡面定義,這種情況只可能有一個執行緒訪問它,不存在不安全的因素了,則用StringBuilder。如果要在類裡面定義成員變數,並且這個類的例項物件會在多執行緒環境下使用,那麼最好用StringBuffer。