mxllcf

导航

重写 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肯定也相同。

posted on 2022-01-21 14:57  mxllcf  阅读(72)  评论(0编辑  收藏  举报