為什麼要重寫equals和hashCode方法

2021-10-06 05:43:41 字數 797 閱讀 4785

當我們 使用hashmap的時候,如果key是我們的自定義型別的話,我們想要的結果是只要物件中所有的屬性的值相等,這樣的物件就是相等的。

而預設情況下object下的equals方法比較的是兩個物件在記憶體中的位址是否相同。所以此時我們要重寫equals方法.

hashcode()方法是乙個本地方法,他是由物件的位址經過hash演算法得到的結果。hashcode有這樣乙個規則:當兩個物件相等(equals相等),那麼這兩個物件的hashcode值一定是相等的,所以此時我們需要重寫hashcode方法.因為new出來的兩個物件的位址肯定不一樣

下面是通過idea自動為我們生成的equals和hashcode方法

public class student 

public void setage(integer age)

public string getname()

public void setname(string name)

@override

public boolean equals(object o)

// 使用name和age經過hash運算

@override

public int hashcode()

}

有這樣乙個小結論:

equals相等 hashcode一定相等

equals不想等 hashcode可能相等

hashcode相等 equals不一定相等

hashcode不想等 equals一定不相等

為什麼要重寫equals方法和hashcode方法

重寫之後的方法 重寫之後的equals方法和hashcode方法 override public boolean equals object o override public inthashcode 因為object的equals方法是兩個物件的引用值得比較,意思就是指向同一位址就相等,否則就相等...

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

在理解這個問題時,我認為最先理解的應該是為什麼會重寫equals呢?理解清楚這個的前提下才有必要去理解為什麼需要去重寫hashcode!為什麼需要重寫equals方法呢?我認為是為了適應業務場景的需求而需要對類的equals方法進行重寫,最經典的重寫equals方法的例子莫過於string類了,在o...

為什麼重寫equals還要重寫hashcode

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