欢迎大家来到IT世界,在知识的湖畔探索吧!
值类型
对于值类型来说 两者比较的都是”内容”是否相同,即 值 是否一样,所以==和Equals比较的始终是值是否相等
运行结果
引用类型
对于引用类型来说,等号(==)比较的是两个变量的”引用” 是否一样,即是引用的”地址”是否相同。而对于equals来说仍然比较的是变量的 ”内容” 是否一样
- 字符串的比较(string)
运行结果
==号是比较两个引用类型的变量的引用是否一致,但是上面的s1 和s2是两个不同的变量,为何比较的输出是true呢?因为微软针对 == 操作符进行了重写。重写后他比较的则是两个变量的内容是否相同
通过反编译软件(dnSpy)可以看出:
- 自定义引用类型
运行结果
对于 s1==s2 比较的结果是false,这点是毫无疑问的,因为他俩是两个不同的变量,所以引用的地址也是不同的。但是对于p1.Equals(s2) 返回false,可能有人会产生疑问,s1 和s2的内容是相同的啊,为什么他俩的比较结果却是为false呢?。原因就在于Student类中没有对她进行重写,因此此时调用的仍是父类中的Equals方法。但是父类是无法知道你都有哪些成员字段的,因此返回的是false。要想让他能够比较两个变量的内容是否相同,那就应该重写Equals方法
运行结果
总结:Equals() 比较的永远是变量的内容是否相同,而 == 比较的则是引用地址是否相同。(前提:此种类型内部没有对 Equals() 或 == 进行重写操作,否则输出可能会有不同)
string 类型是个特例,因为他的内部对这两个都进行了重写。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22717.html