“==” 和 Equals()

使用.NET做开发三年多了,还以为自己的.NET基本功很扎实,谁知一个简单的读程序我却做错了……

教训是:常常你自己觉得你了解的很清楚了,但其实那是一种思维定势,也许你根本就没真正了解。这种不求甚解的学习,是计算机技术最最要不得的。

言归正传,代码清单如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
 1ExpandedBlockStart.gifContractedBlock.gifstring a = new string(new char[] 'h''e''l''l''o' });
 2ExpandedBlockStart.gifContractedBlock.gifstring b = new string(new char[] 'h''e''l''l''o' });
 3Console.WriteLine(a == b);
 4Console.WriteLine(a.Equals(b));
 5// Now let's see what happens with the same tests but
 6// with variables of type object
 7object c = a;
 8object d = b;
 9Console.WriteLine(c == d);
10Console.WriteLine(c.Equals(d));

 

我就不卖关子了,这段代码的输出是: true true false true 。

下面解释一下结果,其实就是操作符重载虚方法重写

前面两个true就不必说了,而后面的true就是因为System.String类型重写了其基类System.Object的虚方法Equals,false呢,因为“==”是操作符重载,所以它会找一个参数匹配的重载方法,即Object的“==”,而Object的“==”的语义是,对象的同一性,所以返回false。

看到一篇文章说自己如何区别使用“==”和Equals:如果是值类型就(省略……)如果是引用类型就(省略……),其实个人觉得问题的根本和值类型或者引用类型没有必然关系,就是看是否重载了操作符,或者重写了Equals虚方法。

第一篇文章,先写到这里了,嘿嘿。

欢迎拍砖。

 

 

 

转载于:https://www.cnblogs.com/Cheese_Ren/archive/2008/09/12/1290236.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值