Skip to content

hashCode()和equals()的关系

HashCode() ⽅法返回对象的哈希码值,用于确定对象在哈希表中的存储位置。在集合类中,如HashMap,对象 的哈希码决定了它在集合中的存储位置。如果两个对象被认为是相等的(通过equals()⽅法),那么它们的哈希 码应该相同。 但是哈希码相等的对象不⼀定相等: 两个对象的哈希码相等并不意味着它们通过equals()⽅法相等

即遵守如下规定: 如果两个对象相等,则它们必须有相同的哈希码。 如果两个对象有相同的哈希码,则它们未必相等。

为什么要重写hashCode()和equals()

equals() ⽅法⽤于⽐较两个对象的内容是否相等。在Java中,默认实现是⽐较对象的引⽤,即⽐较两个对象是否 指向内存中的相同位置。但通常,我们希望⽐较对象的内容是否相等。鉴于这种情况,Object类中equals() ⽅法 的默认实现是没有实⽤价值的,所以通常都要重写。

⽽由于hashCode()与equals()具有联动关系(如果两个对象相等,则它们必须有相同的哈希码),所以equals()⽅ 法重写时,通常也要将hashCode()进⾏重写,使得这两个⽅法始终保持⼀致性。

上次更新于: