string是引用類型,但它也有一些值類型的特征。
string傳值還是傳引用,C#的string聲明是一個String類,當然是傳引用。不過,之所以有這個疑惑,多數是因為這個情況:
string a = "aaa";
string b = a;
b = "bbb";
這時候輸出結果,結果發現a的值還沒有變,分析一下:
string a = "aaa"; // a-->new String("aaa")
string b = a; // b-->a, 傳引用
b = "bbb"; // b-->new String("bbb"), 傳引用,b用new string指向了一個新的字符串,a並沒有變。
StringBuilder 是引用類型,如果需要對字符串進行操作的,建議用StringBuilder 。例如你需要不斷的接拼字符串。必須引用System.Text
String 對象是不可改變的。每次使用 System.String 類中的方法之一時,都要在內存中創建一個新的字符串對象,這就需要為該新對象分配新的空間。在需要對字符串執行重復修改的情況下,與創建新的 String 對象相關的系統開銷可能會非常昂貴。如果要修改字符串而不創建新的對象,則可以使用 System.Text.StringBuilder 類。例如,當在一個循環中將許多字符串連接在一起時,使用 StringBuilder 類可以提升性能。
class引用為型,無論怎麼傳值,都是傳送引用
下面看一個極簡單的例子: