當一個類有可能會和其他類發生比較的時候,我們會重寫equals方法,但大多數情況下,都忽略了重寫hashCode方法。
這裡說一下重寫hashCode的必要性。
當我們使用HashSet或者HashMap的時候,在比對value|key是否存在時,會調用hashCode方法。
注意,hashSet的contains方法其實是依賴于HashMap的containsKey方法的。
我們來看下containsKey方法的實作:
由上面代碼即可知,hashCode是重要的判斷依據,沒有重寫hashCode,equals表現相等的兩個類,它們的hashCode并不相等。
是以會導緻containsKey方法傳回false,測試代碼如下:
包含HashCode的類:
沒有重寫hasCode的類:
測試類:
執行的結果為:
true
false
符合預期。證畢。