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

原创 2018年04月17日 14:33:23

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(),能够实现对Int32的值的比对,所以返回了与==不同的结果。

C#中的‘集合’案例

-
  • 1970年01月01日 08:00

简单明了理解java中的“==”和“equals”的区别

在java中,首先我们理解基本数据类型和引用数据类型。 所谓基本数据类型,就是数据的值直接存储在内存的栈空间,不存在“引用”的概念,有8种基本数据类型,byte(1个字节),boolean(1个字节)...
  • oShuangLengChangHe12
  • oShuangLengChangHe12
  • 2017-10-29 16:30:57
  • 275

C#语法小知识(一)Equals和==的区别

==是operator,它必须被声明为静态方法,所以不能是虚函数,无法实现多态。 Equals是非静态方法,所以可以被声明为虚函数,可以实现多态。...
  • ecidevilin
  • ecidevilin
  • 2016-09-06 09:05:01
  • 1696

C#中==与Equals区别

C#中的相等有两种类型:引用相等(ReferenceEquals)和值相等(Equals)。值相等就是说两个对象包含相同的值。而引用相等则比较的是两个对象的引用是否是同一个对象。也就是说,如果Refe...
  • cyb331
  • cyb331
  • 2014-03-31 16:17:14
  • 4704

C#中equals和==的区别和用法

Equals: 下面的语句中,x、y 和 z 表示不为 null 的对象引用。 * 除涉及浮点型的情况外,x.Equals(x) 都返回 true。 * x.Equals(y) 返回与 ...
  • jkpi888
  • jkpi888
  • 2013-11-20 12:15:36
  • 3131

c#中equals和==的区别

先说结论: equal对于非匿名对象来说,比较的是对象是否指向同一个引用,而对于匿名对象来说,比较的是对象的内容是否一样。 ==比较的是栈里面对象指向的地址 对于值类型,二者没有区别 对于string...
  • qq_26010491
  • qq_26010491
  • 2017-03-26 11:16:43
  • 395

Java中==号与equals()方法的区别

==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:int x = 10; ...
  • StriverLi
  • StriverLi
  • 2016-11-01 17:29:08
  • 12633

java中 equals()方法 与 “==”的区别

摘要java语言的 equals() 方法 与 “==” 的区别,是每个初学者都会遇到过的问题。之前自己也很清楚,可日子一长,又渐渐遗忘,于是整理出一篇博客,复习一下。...
  • echosilly
  • echosilly
  • 2016-06-26 18:04:32
  • 4314

Java中==操作符与equals方法的区别

刚开始学Java的童鞋一般对equals方法和==的区别都比较疑惑,最近找了资料才大致弄清楚的,所以把这两者的区别做了一下整理,也方便自己阅读。 首先,==操作符既可以用于比较基本数据类型(boole...
  • Sam_weiy
  • Sam_weiy
  • 2015-09-07 21:13:16
  • 749

String类中的equals方法与Object类中equals方法的区别

今天在无意中发现一个小知识点,难度不大就是简单和大家分享一下。String str1 = new String("abc"); String str2 = new String("abc"); Sys...
  • qq_36952611
  • qq_36952611
  • 2017-06-02 10:25:19
  • 262
收藏助手
不良信息举报
您举报文章:简单明了的概括C#中==和Equals()方法的区别
举报原因:
原因补充:

(最多只允许输入30个字)