对于值类型,两者比较的都是内容是否相同。
对于引用类型,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呢?两个变量的内存地址不是一样的吗?
答:首先需要注意的是==比较的是引用地址,所以这个涉及到了常量池问题。Integer是int基本数据类型的封装类,创建时应该是创建了一个引用,将引用指向这个对象(数值)。真正的数值存储在栈中(栈和堆区别具体看数据结构笔记),所以两个相同值的不同变量,其实都是指向栈中的同一个地址。
详见博客:https://blog.csdn.net/qq_40983603/article/details/78515412