Equals() 与 == operator 的区别

首先,Equals方法是一个来源于在System.Object的方法,它是一个虚函数,所有的类都可以对其进行覆盖(overridden)操作.

==操作符,所有的类都可以对其重载(overloaded)操作.

 

引用类型: 对于所有没有重载==操作符的对引用类型来说,==操作符的作用相当于比较两个对象是否引用同一个对象,其本质相当于: Object类的static ReferenceEquals() 方法.

 

值类型: 值类型基类ValueType没有提供==操作符默认的重载,但是大多数的值类型提供各自的重载.对于Equals方法,ValueType使用反射的方法实现了比较,这也导致速度会慢一些.

 

主要区别主要集中在多态情况下:使用Equals方法,对象根据多态特性会自动找到相对类型的Equals方法的覆盖,而==操作符只能看那当前类型是否有对==进行重载,如果没有重载,那么两个引用比较的将是是否指向同一对象.

 

示例:

string a = new string(new char[] {'h', 'e', 'l', 'l', 'o'});

string b = new string(new char[] {'h', 'e', 'l', 'l', 'o'});

Console.WriteLine (a==b);

Console.WriteLine (a.Equals(b));        

 

object c = a;

object d = b;

Console.WriteLine (c==d);

Console.WriteLine (c.Equals(d));

 

运行结果 

True//string对==operator进行了重载

True//Equals在String类中有相应的覆盖版本

False//Object类型的==operator操作,相当于比较两个引用是否指向相同的对象

True//Equals会调用String类的Equals函数

 

总而言之:

对于引用类型:使用Equals()方法,除了string类,==的阅读性会更好;

对于值类型:使用==操作符.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值