C#中 Equals 和 == (等于号)的区别「终于解决」

C#中 Equals 和 == (等于号)的区别「终于解决」值类型对于值类型来说 两者比较的都是”内容”是否相同,即 值 是否一样,所以==和Equals比较的始终是值是否相等运行结果引用类型对于引用类型

欢迎大家来到IT世界,在知识的湖畔探索吧!

值类型

对于值类型来说 两者比较的都是”内容”是否相同,即 值 是否一样,所以==和Equals比较的始终是值是否相等

C#中 Equals 和 == (等于号)的区别「终于解决」

运行结果

C#中 Equals 和 == (等于号)的区别「终于解决」

引用类型

对于引用类型来说,等号(==)比较的是两个变量的”引用” 是否一样,即是引用的”地址”是否相同。而对于equals来说仍然比较的是变量的 ”内容” 是否一样

  • 字符串的比较(string)

C#中 Equals 和 == (等于号)的区别「终于解决」

运行结果

C#中 Equals 和 == (等于号)的区别「终于解决」

==号是比较两个引用类型的变量的引用是否一致,但是上面的s1 和s2是两个不同的变量,为何比较的输出是true呢?因为微软针对 == 操作符进行了重写。重写后他比较的则是两个变量的内容是否相同

通过反编译软件(dnSpy)可以看出:

C#中 Equals 和 == (等于号)的区别「终于解决」

  • 自定义引用类型
C#中 Equals 和 == (等于号)的区别「终于解决」

运行结果

C#中 Equals 和 == (等于号)的区别「终于解决」

对于 s1==s2 比较的结果是false,这点是毫无疑问的,因为他俩是两个不同的变量,所以引用的地址也是不同的。但是对于p1.Equals(s2) 返回false,可能有人会产生疑问,s1 和s2的内容是相同的啊,为什么他俩的比较结果却是为false呢?。原因就在于Student类中没有对她进行重写,因此此时调用的仍是父类中的Equals方法。但是父类是无法知道你都有哪些成员字段的,因此返回的是false。要想让他能够比较两个变量的内容是否相同,那就应该重写Equals方法

C#中 Equals 和 == (等于号)的区别「终于解决」

运行结果

C#中 Equals 和 == (等于号)的区别「终于解决」

总结:Equals() 比较的永远是变量的内容是否相同,而 == 比较的则是引用地址是否相同。(前提:此种类型内部没有对 Equals() 或 == 进行重写操作,否则输出可能会有不同)

string 类型是个特例,因为他的内部对这两个都进行了重写。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22717.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信