這是我最後一次採訪瞭如何去類:字符串VS當兩個是引用類型
問:在哪裏存儲的字符串?
答:堆,因爲它是引用類型
問:解釋我這下面的代碼:
static void Main(string[] args)
{
string one = "test";
string two = one;
one = one + " string";
Console.WriteLine("One is {0}" , one);
Console.WriteLine("Two is {0}", two);
}
答:像下面德魯兩個圖表:
(代表聲明,string two = one;
(代表聲明,one = one + " string";
。一個新的字符串在堆上創建和分配)
問:正確的。畫出下面的代碼片段相似:
class Program
{
static void Main(string[] args)
{
Test one = new Test { someString = "test" };
Test two = one;
one.someString = "test String";
Console.WriteLine("One is {0}", one.someString);
Console.WriteLine("Two is {0}", two.someString);
}
}
class Test
{
public string someString { get; set; }
}
答:
[Test two = one
]
one.someString = "test String";
問:確定。你說strings
和classes
都是參考類型。那麼爲什麼要創建一個新的字符串對象並賦值,而對於類,現有的字符串屬性本身會被修改?
答案:因爲字符串是不可變的,而類是可變的。爲什麼類的設計者在保持字符串不可變的情況下使其變爲可變的?爲什麼在任何地方都有很多有用的答案,但是任何人都可以通過這種方式簡化用上面的代碼解釋這個特定行爲?)
[爲什麼.NET字符串是不可變的?](http://stackoverflow.com/questions/2365272/why-net-string-is-immutable)有趣的閱讀,而不是試圖解決任何關於類不變性的觀點。 –
http://stackoverflow.com/questions/4274193/what-is-the-difference-between-a-mutable-and-immutable-string-in-c – Nahum
http://stackoverflow.com/questions/93091/why -cant-strings-be-mutable-in-java-and-net – Nahum