c#中Equals()和==区别

2021-01-08 10:28

阅读:687

标签: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


评论


亲,登录后才可以留言!