非驢非馬的string

2022-04-04 12:51:23 字數 1117 閱讀 7839

system.string直接繼承於system.object,所以它絕對是乙個引用型別。但是——

它有暱稱,叫string,也許是為了配合stl中的string吧。

建立乙個string物件也不用new,直接賦值就可以了 string str=」123」;

string的比對跟值型別相似,是按內容比對,而不是按位址比對。如果兩個string都是 "a"那他們就是相等的。

不管怎麼說string還是很好用的。它有我們熟悉的轉義符,它有簡單的+操作進行字串連線,它有length屬性反映字元個數,還可以通過split()方法進行切割。

除了多出一些好用的函式,還有兩個地方是c++程式設計師不熟悉的。

1)@符號可以用在字串前面,代表轉義符失效。

平時我們寫c++字串會這樣:

而現在,我們只需要這樣:
真是簡單多了。
2)string是不能改變的。
當我們寫:
string s = "123";
s = s + "456";

的時候,系統並不是會原來s物件後面增加了123這個字串,string是不能被改變的,還記得麼。

系統的真實操作是重新建立了乙個字串,把s和123內容賦值在裡面,並把這個字串的引用賦值給s。

我們再進一步考慮這個問題,string是乙個飲用物件,也就是說s會建立在堆裡面。,然後照我們剛才所說,系統重新建立了乙個字串以存放s和123結合的內容,這樣,現在堆裡就有2個字串物件了。系統最後把第二個字串物件的引用賦值給s。也就是說s現在指向了新的記憶體位址,那麼第乙個字串的記憶體位址還存在麼?當然存在!

string s="123";

s = s+"345";

s = s+"456";

s = s+"567";

...

現在,我們的堆裡面會有很多string的記憶體存在,等著被其他人 「delete」的時候才能夠被釋放。這樣也太浪費了吧。

確實如此,如果需要對字串進行修改操作的時候,我們並不推薦用string這個物件,而是用system.text.stringbuilder。stringbuilder的內容是可以跟著改變的,這樣就避免了剛才的問題。

String與string的區別

1 string是乙個類,string是一種資料型別.2 string是c 中的類,string是.net framework的類 在c ide中不會顯示藍色 3 c string對映為.net framework的string 4 如果用string,編譯器會把它編譯成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的區別

c 是區分大小寫的,但是我卻發現c 中同時存在string與string,於是我很困惑,於是我上網搜尋了一下,於是我了解了一些小知識。msdn中對string的說明 stringis analiasforstringin the net framework。string是string的別名而已,st...