using System;namespace EqualsTest {class EqualsTest{static void Main(string[] args){//值类型int x = 1;int y = 1;Console.WriteLine(x == y);//TrueConsole.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);//TrueConsole.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,引用类型都返回False。
②上面的①并不完全正确,因为有两个特例:结构体(最像引用类型的值类型);字符串(最像值类型的引用类型)。
③引用类型(除去字符串),以及结构体,根本不能用==去对比,编译就会报错。