string和stringbuffer的區別
2008-04-10 11:08
string與stringbuffer的區別
########################稍微延伸說來########################
public class *** else }}
列印的結果是:乙個記憶體空間。這裡==的意義是兩個運算元是否指向同乙個物件。
可見s2在不用new建立的情況下會自動檢索到具有相同內容的記憶體空間中共享,那麼既然s1和s2共享了同乙個物件,再看下面的**:
public class xx else }}
**結果是
you are fired!
不是乙個記憶體空間
可見,string中s1的內容雖然被改寫,但是已經不在是原來第一次分配到的那個記憶體空間,也就是string類的內容能被改變,但一旦改變系統將為其分配新的記憶體
說到與stringbuffer的區別,從根本上來說應該是
stringbuffer在做字元長度變動的時候將繼續使用原來的記憶體空間,不新分配.
而string的長度一旦變動,就如上面的例子一樣,其內部將分配新的記憶體空間
string a = "a";//假設a指向位址0x0001,
a = "b";//重新負值後a指向位址0x0002,但0x0001位址中儲存的"a"依舊存在,但已經不再是a所指向的。
從表面上看string型別的物件改變了值,但事實是他不能改變值,只能改變指向的位址
stringbuffer則不同,直接改變指向的位址中保留的值
還有stringbuffer s1 = new stringbuffer("a");
stringbuffer s2 = new stringbuffer("a");
s1.equals(s2)//為什麼是false
string s1 = new string("a");
string s2 = new string("a");
s1.equals(s2)//為什麼是true
stringbuffer類中沒有重新定義equals這個方法,因此這個方法就來自object類,而object類中的equals方法是用來比較位址的,所以等於false.
string類中重新定義了equals這個方法,而且比較的是值,而不是位址。所以會是true。
總而言之,string的值永遠不會改變! stringbuffer的位址永遠不變!
String和string的區別
msdn中對string的說明 string is an alias for string in the net framework。string是string的別名而已,string是c 中的類,string是framework的類,c string 對映為 framework的 string。如...
String和string的區別
最近老看見有人在論壇上問string和string有什麼區別,答案五花八門差點兒沒讓我背過氣去,乾脆放到blog上來,論壇上就貼位址了 首先,在一般情況下,string和string是一樣的,但是他們也存在如下區別 1 string始終代表 system.string 1.x 或 system.st...
String和string的區別
msdn中對string的說明 string is an alias for string in the net framework。string是string的別名而已,string是c 中的類,string是framework的類,c string對映為framework的string。如果用s...