對於值類型,==和Equal操作的作用是一樣的,就是比較值類型的值是否相等。如果使用object.ReferenceEquals來比較值類型,輸出永遠都是FALSE,因爲他們BOX之後在堆上的引用都不是同一個值。
對於引用類型來說,==,Equal,ReferenceEqual都是對引用對象是否相等的比較,而不是他們的值,除非重寫函數進行值比較。
對於字符串這種特殊的值類型來說,==和Equal操作的作用是一樣的,就是比較值類型的值是否相等。如果使用object.ReferenceEquals來比較值類型,就要看字符串是否是新實化的,否則字符串池的機制會使得對象的引用相等。
string x =new String(new char[]{'a'});
string y = "a";
string z = "a";
Console.WriteLine(x.Equals(y));//ture
Console.WriteLine(object.ReferenceEquals(x,y));//false
Console.WriteLine(object.ReferenceEquals(z, y));//true