String和StringBuffer的區別?

2021-05-22 21:05:41 字數 1106 閱讀 5871

對於這個問題,網路上已經有較多的解答,大多數都是說string

和stringbuffer

,它們可以儲存和操作字串,即包含多個字元的字元資料。這個

string

類提供了數值不可改變的字串。而這個

stringbuffer

類提供的字串可以進行修改。當你知道字元資料要改變的時候你就可以使用

stringbuffer

。典型地,你可以使用

stringbuffers

來動態構造字元資料。那麼可能初學者可能就會有這樣的問題,怎麼不可變啊,比如如下的**

string  str = "str";

str = "str1";

system.out.print("str");

那麼這個時候列印的不就是str1麼?怎麼沒有變啊?string建立的物件一樣改變了啊!其實是沒有變的,我想初學者忽略了這樣乙個問題,就是str = "str1";這句話的時候,其實是新建了乙個物件,並且讓引用str指向了這個位址,原來的「str」那個位址就被拋棄了。

接下來又引入了這樣乙個問題,到底string str=new string("abc");這樣一句話建立了幾個物件?我們可以把上面這行**分成string str、=、"abc"和new string()四部分來看待。string str只是定義了乙個名為str的string型別的變數,因此它並沒有建立物件;=是對變數str進行初始化,將某個物件的引用(或者叫控制代碼)賦值給它,顯然也沒有建立物件;現在只剩下new string("abc")了。那麼,new string("abc")為什麼又能被看成"abc"和new string()呢?我們來看一下被我們呼叫了的string的構造器:

public string(string original)

1、使用new建立物件。

2、呼叫class類的newinstance方法,利用反射機制建立物件。

我們正是使用new呼叫了string類的上面那個構造器方法建立了乙個物件,並將它的引用賦值給了str變數。同時我們注意到,被呼叫的構造器方法接受的引數也是乙個string物件,這個物件正是"abc"。所以引號引起來的部分其實也是乙個物件,這就正好解釋了上面提到的string建立的物件是不可以改變的了。

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