C 中string的小結

2022-03-10 03:37:11 字數 852 閱讀 9945

c#中的string型別明確定義為引用型別,但是使用時常常表現出數值型的特性。最典型的例子就是交換字串。

1

public

static

void stringexchange(string a, stringb)2

7public

static

void stringexchange(ref

string a, ref

stringb)8

很明顯地,如果想要實現字串交換,需要使用第二種實現。可是,string不是引用型別嗎?為什麼在函式內交換了,在函式外並沒有發生改變呢?要理解這個問題,我們需要以下兩點基礎:

string是引用型別,應該做這樣的理解。語句」string a = "abc";「其實是建立了乙個string的例項物件"abc",並且讓引用a指向了這個物件。同時,物件"abc",也就是乙個string物件是不可改變的,這一點是c#語言上設計決定的;任何對物件的改變,其實都是建立了新的string物件,並且讓引用指向了那個物件。

string雖然是引用,但是在作為方法的引數傳遞時,這個引用本身發生了值傳遞。也即是說,在方法內部,操作的其實是這個引用的副本——但是,兩個引用是指向同一記憶體空間的。

有了以上的準備,就好理解這個問題了。string傳遞了乙個引用的副本給方法,方法在內部對引用做了修改,但是由於引用指向的string物件是不可以修改的,所以執行時會建立新的string物件,並且讓內部的引用的副本指向新的物件。而這一切都跟外部的原始引用沒有關係。所以,外部的string物件自然也就沒有改變。在第二種實現中,因為使用了ref關鍵字,我們操作的實際上就是原始的引用,因此,在方法內部讓它指向新的string物件後,可以改變原始值。

C 程式設計小結 string 巨集

1.可以是兩個string物件相加 include string s1 abc string s2 efg string s3 s1 s2 2.和字串字面值連線 當進行string物件和字串字面值混合連線操作時,操作符的左右運算元必須至少有乙個是string型別的 include string s4...

string函式小結

標頭檔案 include include string a,b 定義兩個字串變數 a 123 456 賦值 b abc def a b 賦值 len a.length len a.size 返回字串a的長度 同a.length cin a 輸入,以空格換行結束 getline cin,a 輸入,以換...

C 中string和String的區別

string是string的別名。string是c 中的類,string是.net framework的類 在c ide中不會顯示藍色 c string對映為.net framework的string 如果用string,編譯器會把它編譯成string,所以如果直接用string就可以讓編譯器少做一...