c#中Equals()和==区别

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

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

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

 c#中Equals()和==区别

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

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

 c#中Equals()和==区别

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

额外疑问

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

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

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

c#中Equals()和==区别

上一篇:基于asp.net core webapi的商品管理系统Api开发 必备基础知识


下一篇:windows terminal美化