這裏有2個對象:「test」和「anotherTest」。
階段1:
arrayList.Add(testString) //Adds the reference stored in testString
//to the end of arrayList.
這條線的執行後,ArrayList的[0]還包含一個參考到「測試」(因爲在這個階段,的TestString包含到對象「測試」的引用) 。
您可以檢查此:
Console.WriteLine(object.ReferenceEquals(testString, arrayList[0])); //outputs true
第2階段:
arrayList[0] = "anotherTest"; //stores a reference to the object "anotherTest" in
//arrayList[0]
我們沒有改變的TestString的。它仍然引用「測試」。可以再檢查一下,存儲在數組列表[0]和的TestString的參考文獻是不同的:
Console.WriteLine(object.ReferenceEquals(testString, arrayList[0])); //outputs false
的TestString - >存儲參照 「測試」
ArrayList的[0] - >存儲提及 「anotherTest」
當你需要他時,Jon Skeet在哪裏? – Steve
我仍然認爲不變性是這裏的核心概念。如果字符串WERE是可變的,那麼這個問題的答案會是相反的(假設'Add'複製參考而不是參考值)。我們可以在任何地方都有相同的參考,但該參考中的值將隨着'='運算符的變化而變化。每個人都假設OP知道每個字符串都等於'new String(「...」)'。但如果他這樣做了,他首先不會問這個問題。 – Steve
這很棒。非常感謝你的答案,他們都很好。實際上,我將不得不再次提出這個問題,以獲得不同的代碼示例,一個實例化的類。再次感謝。 –