在C#中類型分為值類型和引用類型,引用類型和值類型都繼承自System.Object類,幾乎所有的引用類型都直接從System.Object繼承,而值類型具體一點(diǎn)則繼承System.Object的子類,即繼承System.ValueType。而String類型卻有點(diǎn)特別,雖然它屬于引用類型,但是他的一些特性卻有點(diǎn)類似值類型。

關(guān)于C# String

1、不變性

我們先來看看一個(gè)例子:

static void Main(string[] args){    string str1 = "string";    string str2 = str1;
    Console.WriteLine(object.ReferenceEquals(str1, str2));
    str2 += "change";
    Console.WriteLine(object.ReferenceEquals(str1, str2));
    Console.ReadKey();
}

輸出結(jié)果是True、False。為什么呢?我們來看看IL。

.entrypoint  // 代碼大小       48 (0x30)
  .maxstack  2
  .locals init ([0] string str1,
           [1] string str2)  IL_0000:  nop  IL_0001:  ldstr      "string"  IL_0006:  stloc.0 &