為什麼重寫equals必須重寫hashCode呢

2021-09-13 16:11:56 字數 1040 閱讀 2265

在理解這個問題時,我認為最先理解的應該是為什麼會重寫equals呢?理解清楚這個的前提下才有必要去理解為什麼需要去重寫hashcode!

為什麼需要重寫equals方法呢?我認為是為了適應業務場景的需求而需要對類的equals方法進行重寫,最經典的重寫equals方法的例子莫過於string類了,在object類中,其equals方法即「==」,比較的是物件在記憶體中的位址值。而string重寫了object中的equals方法,使其變成比較string類中的各元素是否一致。

為了理解為什麼在重寫equals方法的時候,需要重寫hashcode方法?需要擬定如下的業務場景

當我們對父類(包括object)的equals方法重寫之後,如果需要將其物件置入hashmap中的時候,由於hashmap的key是不能相同的,其判斷方法是先根據hashcode方法進行判斷,在hashcode方法不相等的情況下,才會通過equals方法判斷兩個物件是否相等。

看如下**:

public class person 

@override

public boolean equals(object obj)

return false;

}public static void main(string args)

}

我們在person類中,重寫了equals方法,其目的在於判斷物件是否相等,依據的是person類中的屬性去判斷兩個物件是否相同,當使用了hashmap容器類的時候,發覺我們重寫person類中的equals方法的本身意義消失了。按重寫equals方法的意義,將兩個屬性都為小紅的person類放入hashmap時,後者需要將前者覆蓋,但是實際結果顯示並沒有覆蓋本來的類,其原因在於並沒有重寫hashcode方法

相比較string類中,其重寫equals方法時,重寫了hashcode方法,其重寫equals方法的意義就完美的體現出來了。下面看如下**:

public static void main(string args)
好了,目前的理解也只能到這兒了,如果還有不足的地方,希望可以指出

為什麼重寫equals還要重寫hashcode

在定義的類重寫equals方法的同時為什麼一定要重寫jdk本地的hashcode方法呢?我們從兩者的本質上出發去解決這個問題 hashcode 方法時本地方法,返回的是物件的記憶體位址,object類的equals方法比較的就是物件的記憶體位址,所以說如果equals相等,說明兩個物件的位址也相等 ...

重寫了equals為什麼還要重寫hashcode

首先先來看看不重寫任何方法的結果 可以看出建立的兩個物件所有資訊都是一樣的,說明物件這就是指的同乙個人.可判斷這為false說明這不是同乙個物件.再來看看重寫equals不重寫hashcode的結果 然而重寫了equals,且student.equals student1 返回true,根據hash...

重寫equals時還必須重寫hashCode方法

1.public boolean equals object obj 和 hashcode 方法是object物件中的方法 2.equals 與 hashcode間的關係是這樣的 a.如果兩個物件相同 即用equals比較返回true,那麼它們的 hashcode 值一定要相同 b.如果兩個物件的 ...