码迷,mamicode.com
首页 > Windows程序 > 详细

c#中Equals()和==区别

时间:2020-06-14 16:38:49      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:article   cal   sha   log   封装   重写   art   logs   blog   

对于值类型,两者比较的都是内容是否相同。

对于引用类型,Equals比较的是变量的内容是否相同,而= =比较的则是引用地址是否相同

比如自写的类,如果有两个对象内的成员变量值相同,这两个对象进行Equals也会返回false,可以简单理解为他们的内存地址不同,所以在使用哈希表或者字典时需要重写

 技术图片

(图片来自博客:https://www.cnblogs.com/xiaochen-vip8/p/5506478.html

String 类型是个特例,因为string的内部对这两个都进行了重写。其实string==是对Equals()的重写,如图可知

 技术图片

以上参考自博客:https://www.cnblogs.com/changbaishan/p/10579021.html

额外疑问

问:以int类型为例,为什么相同值的两个不同变量,他们在==运算中是true呢?两个变量的内存地址不是一样的吗?

答:首先需要注意的是==比较的是引用地址,所以这个涉及到了常量池问题。Integerint基本数据类型的封装类,创建时应该是创建了一个引用,将引用指向这个对象(数值)。真正的数值存储在栈中(栈和堆区别具体看数据结构笔记),所以两个相同值的不同变量,其实都是指向栈中的同一个地址。

详见博客:https://blog.csdn.net/qq_40983603/article/details/78515412

c#中Equals()和==区别

标签:article   cal   sha   log   封装   重写   art   logs   blog   

原文地址:https://www.cnblogs.com/qjns/p/13125143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!