在网上看到的有一大堆解析,有什么前者对比栈中的值,后者对比堆中的内容的,或者是说对比什么地址的,对比内容的,我靠,真的被绕成煞笔了。
在不考虑所有的重写的情况下,==和equal其实是不是相同的!
object a = new object(); object b = new object(); Console.WriteLine(a == b);//false Console.WriteLine(a.Equals(b));//false int i = 1; int ii = 1; Console.WriteLine(i == ii);//true Console.WriteLine(i.Equals(ii));//true Console.ReadKey();
从上面例子中,引用类型和值类型的==和equal对比结果都是一样的,据我猜测都是对比的栈中的数据,不管是地址还是数值或者其他,反正就是直接对比的栈数据,一样就是true,不一样就是false,应该没有那么复杂。
a和b栈中保存的是两个不同的地址,所以它们不相等;i和ii栈中的数据都是1,所以它们是相等的。
如果想要其它方式的对比,可以重写Equal方法或则重载==,定制成你想咋样就咋样,想对比引用数据的内容就对比内容。最明显的例子就是String类型,它是一个引用类型,但是它重载了==和重写了Equal,实际对比的是字符串中的每一个字符。