C#中的equals()和==
阿新 • • 發佈:2017-10-29
字符 using ace read true names ati 以及 args
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 = newA(); 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; } }
總結:
①兩個“相同”的值類型不管是equals()還是==都返回True,兩個“相同”的值類型不管是equals()還是==都返回False。
②上面這句話並不完全正確,因為值類型中有個特例:結構體;引用類型中也有個特例:字符串。
③除字符串之外的引用類型,以及結構體,根本不能用==去對比,編譯就會報錯。
C#中的equals()和==