Equals: 下麵的語句中,x、y 和 z 表示不為 null 的對象引用。* 除涉及浮點型的情況外,x.Equals(x) 都返回 true。 * x.Equals(y) 返回與 y.Equals(x) 相同的值。 * 如果 x 和 y 都為 NaN,則 x.Equals(y) 返回 true。 ...
Equals:
下麵的語句中,x、y 和 z 表示不為 null 的對象引用。
* 除涉及浮點型的情況外,x.Equals(x) 都返回 true。
* x.Equals(y) 返回與 y.Equals(x) 相同的值。
* 如果 x 和 y 都為 NaN,則 x.Equals(y) 返回 true。
* 當且僅當 x.Equals(z) 返回 true 時,(x.Equals(y) && y.Equals(z)) 才返回 true。
* 只要不修改 x 和 y 引用的對象,對 x.Equals(y) 的相繼調用將返回相同的值。
* x.Equals(null) 返回 false。
==:
對於預定義的值類型,如果操作數的值相等,則相等運算符 (==) 返回 true,否則返回 false。
對於 string 以外的引用類型,如果兩個操作數引用同一個對象,則 == 返回 true。
對於 string 類型,== 比較字元串的值。
Equals與==的區別
"==" : 操作比較的是兩個變數的值是否相等,對於引用型變數表示的是兩個變數在堆中存儲的地址是否相同,即棧中的內容是否相同。
"equals" : 操作表示的兩個變數是否是對同一個對象的引用,即堆中的內容是否相同。
而字元串是一個特殊的引用型類型,在C#語言中,重載了string 對象的很多方法方法(包括equals
總結如下:
1、對於值類型,==和equals等價,都是比較存儲信息的內容。
2、對於引用類型,==比較的是引用類型在棧中的地址,equals方法則比較的是引用類型在托管堆中的存儲信息的內容。
using System; namespace EqualsTest { class EqualsTest { static void Main(string[] args) { //值類型 int x = 1; int y = 1; Console.WriteLine(x == y);//True Console.WriteLine(x.Equals(y));//True //引用類型 A a = new A(); B b = new B(); //Console.WriteLine(a==b);//報錯 Console.WriteLine(a.Equals(b));//False //字元串(最像值類型的引用類型) string m = "1"; string n = "1"; Console.WriteLine(m==n);//True Console.WriteLine(m.Equals(n));//True //結構體(最像引用類型的值類型) T t = new T(); V v = new V(); //Console.WriteLine(t == v);//報錯 Console.WriteLine(t.Equals(v));//True Console.Read(); } } class A { public int X = 1; } class B { public int X = 1; } struct T { int X; } struct V { int X; } }View Code
原址:https://blog.csdn.net/studyofnet/article/details/16842235
https://www.cnblogs.com/9cct/p/7749358.html