简单明了的概括C#中==和Equals()方法的区别

C#编程中有两个最常用的比对手段:==运算符与Equals()方法。

 

那么这两者的区别在哪里呢?

1.==在比对值类型时,如果二者值相等,则返回true,否则返回false。

2.==在比对引用类型时,如果二者引用的是同一个对象,则返回true,否则返回false。

3.Equals()方法,在不重写的情况下,与==没区别。

4.微软重写了string的Equals()方法,使得这个方法比对的是string的字符串内容,同时也重载了==运算符,使得string在进行==比对时,得到的结果与Equals()相同,即比对字符串内容(这点区别于Java)

 

但是,是否只有string的Equals得到了重写?让我们看看下面这段代码和它的运行结果——

 

在将值类型的数据赋值给object类型的变量时,发生了装箱操作:对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。

因此,a 和 b引用了堆上的两个不同对象,==返回了false。

那么,为什么Equals()比对会返回true?按照之前的说明:Equals()方法,在不重写的情况下,与==没区别。Equals()返回的应该也是false才对。

原因就在于,a.Equals(b)所调用的Equals(),不是object的那个与==没区别的Equals(),而是Int32中重载过的Equals()。

这个重载过的Equals()返回了与==不同的结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值