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
String和StringBuffer的區別?
對於這個問題,網路上已經有較多的解答,大多數都是說string 和stringbuffer 它們可以儲存和操作字串,即包含多個字元的字元資料。這個 string 類提供了數值不可改變的字串。而這個 stringbuffer 類提供的字串可以進行修改。當你知道字元資料要改變的時候你就可以使用 stri...
String和StringBuffer的區別
string和stringbuffer的區別 2008 04 10 11 08 string與stringbuffer的區別 稍微延伸說來 public class else 列印的結果是 乙個記憶體空間。這裡 的意義是兩個運算元是否指向同乙個物件。可見s2在不用new建立的情況下會自動檢索到具有相...
String和StringBuffer學習總結
一 string x abc 和string y new string abc 區別 string x abc 變數x指向的是常量池的字串常量物件。x asd 表示x指向 asd 字串常量的位址,而不是把 abc 修改為 asd string y new string abc 變數y指向的是堆中的字...