重写 equals需要重写hashCode吗?


==与equals:

== : 它的作?是判断两个对象的地址是不是相等。即,判断两个对象是不是同?个对象(基本数据类型==?较的是值,引?数据类型==?较的是内存地址)

equals() : 它的作?也是判断两个对象是否相等。但它?般有两种使?情况:

情况 1:类没有覆盖 equals() ?法。则通过 equals() ?较该类的两个对象时,等价于通过“==”?较这两个对象。

情况 2:类覆盖了 equals() ?法。?般,我们都覆盖 equals() ?法来?较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等

首先如果两个对象相等,那么equals方法肯定返回true,hashcode肯定相等。但是如果只是hashcode相等,不一定两个对象相等。

所以重写equals方法肯定需要重写hashcode方法。好比咱们有两个相同值的User对象,假如只重写equals而不重写hashcode,那么User类的hashcode方法就是Object默认的hashcode方法,由于默认的hashcode方法是根据对象的内存地址经哈希算法得来的,那么两者的hashcode不一定相等。则与我们之前的前提,两个对象equals方法相同,则hashcode肯定也相同。