String和StringBuffer的區別

2021-04-19 06:55:38 字數 1217 閱讀 4147

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...