官方解析
在 Java 中,hashCode 和 equals 方法都是 Object 类的方法。它们的作用分别如下:
-
hashCode 方法返回对象的哈希码,用于支持基于哈希表的集合,如 HashMap、HashSet 等。如果两个对象的 equals 方法返回 true,则它们的 hashCode 方法必须返回相同的值,反之则不需要。
-
equals 方法用于比较对象是否相等。默认情况下,equals 方法使用的是 == 操作符,即只有两个对象引用指向同一个对象时才会返回 true。但是,大部分情况下,我们需要重写 equals 方法来实现自己定义的相等规则。
两者之间的区别在于,hashCode 方法返回的是一个 int 类型的数值,而 equals 方法返回的是一个 boolean 类型的值。
hashCode 方法用于快速比较两个对象是否不同,因为如果它们的哈希码不同,那么它们肯定不相等。equals 方法则用于判断两个对象是否真正相等,这个判断比较复杂,需要根据对象的实际情况来定义。
另外,需要注意的是,== 操作符用于比较两个对象的引用是否相等,即它们是否指向同一个对象。而 equals 方法则用于比较两个对象的值是否相等。
在 Java 中,对象的值比较往往需要根据对象的实际情况来定义,因此一般需要重写 equals 方法。
hashCode和equals方法是Object类的两个重要方法,用于判断对象的相等性和生成对象的哈希值。
hashCode:
-
可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。
== :
== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是 指相同一个对象。比较的是真正意义上的指针操作。
-
比较的是操作符两端的操作数是否是同一个对象。
-
两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。
-
比较的是地址
equals:
equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以 适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的 equals方法返回的却是==的判断。
总结:
-
如果两个对象equals相同,hashCode一定相同
-
如果两个对象equals不同,hashCode不一定不同
-
如果两个对象的hashCode相同,它们的equals并不一定相同
-
如果两个对象的hashCode不相同,它们的equals一定不相同
所有比较是否相等时,都是用equals ,并且在对常量相比较时,把常量写在前面,因为使用object的 equals object可能为null 则空指针 在阿里的代码规范中只使用equals ,阿里插件默认会识别,并可以快速修改,推荐安装阿里插件来排 查老代码使用“==”,替换成equals