==和equal

在网上看到的有一大堆解析,有什么前者对比栈中的值,后者对比堆中的内容的,或者是说对比什么地址的,对比内容的,我靠,真的被绕成煞笔了。

在不考虑所有的重写的情况下,==和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,实际对比的是字符串中的每一个字符。


首页 我的博客
粤ICP备17103704号