一:在搞明白==和equals之前我们要搞明白一件事情,就是java中内存分类?
java中内存可以简单的分类为栈内存和堆内存(ps:笔主只是简单的分类,便于笔主这种入门级程序员理解,如果想细分jvm内存可以查阅相关资料)
栈内存:存放基本数据类型和引用变量,类似这种 int a = 1; String str = "aa";这种你创建的变量只涉及栈内存的空间,不会涉及堆内存。
堆内存:存放对象,类似这种 Person p = new Person(); 这种你创建的对象涉及两块内存,栈内存存放person实例的首地址,堆内存存放真正的对象内容
二:然后我们在来看==和equals
==比较栈内存的内容,所以比较基本数据类型和字符串我们都用它
equals比较堆内存存放的内容,因为对象涉及两块内存,我们平时项目中都是比较对象的每一个属性是否相等,如果一样我们就认为它相等,而equals就是比较堆内存的,所以我们比较对象用equals
三:equals的延伸
笔主看过equals方法的源码,定义在Object对象中,如下
看到没有是“==“,也就说jdk带的equals方法只适合比较基本数据类型和字符串
当我们比较对象的时候必须重写Object的equals,既然重写的equals方法,那么hashCode()方法很有必要重写(具体为什么,我之前看过一个博文说重写了equals方法就必须重写hashCode()方法,有兴趣的朋友可以研究下,评论给我。)