hashcode 和 equal方法過載
1、 為什麼要過載equal方法?
答案:因為object的equal方法預設是兩個物件的引用的比較,意思就是指向同一記憶體,位址則相等,否則不相等;如果你現在需要利用物件裡面的值來判斷是否相等,則過載equal方法。
2、 為什麼過載hashcode方法?
答案:一般的地方不需要過載hashcode,只有當類需要放在hashtable、hashmap、hashset等等hash結構的集合時才會過載hashcode,那麼為什麼要過載hashcode呢?
就hashmap來說,好比hashmap就是乙個大記憶體塊,裡面有很多小記憶體塊,小記憶體塊裡面是一系列的物件,可以利用hashcode來查詢小記憶體塊hashcode%size(小記憶體塊數量),所以當
equal相等時,hashcode必須相等,而且如果是object物件,必須過載hashcode和equal方法。
3、 為什麼equals()相等,hashcode就一定要相等,而hashcode相等,卻不要求equals相等?
答案:1、因為是按照hashcode來訪問小記憶體塊,所以hashcode必須相等。
2、hashmap獲取乙個物件是比較key的hashcode相等和equal為true。
之所以hashcode相等,卻可以equal不等,就比如objecta和objectb他們都有屬性name,那麼hashcode都以name計算,所以hashcode一樣,但是兩個物件屬於不同型別,所以equal為false。
4、 為什麼需要hashcode?
1、 通過hashcode可以很快的查到小記憶體塊。
2、 通過hashcode比較比equal方法快,當get時先比較hashcode,如果hashcode不同,直接返回false。
以下是乙個具體類的例項**:
public class person
@override
public boolean equals(object obj)
else if (!name.equals(other.name))
return false;
return true;}}
JAVA基礎 equal和hashcode的區別
面試時被問到了equal和hashcode的區別,在這裡總結一下 equals 是根類obeject 中的方法。源 如下 public boolean equals object obj 可見預設的 equals 方法,直接呼叫 比較物件位址。不同的子類,可以重寫此方法,進行兩個物件的 equals...
帶我重新認識HashCode和equals
介紹一下equals equals 比較兩個物件是不是相同,問題來了,equals比較的是位址,引用,這也是最準確的方法。介紹一下hashcode hashcode 返回的是當前物件的實體地址轉換成的乙個int型別資料,看清楚這裡是轉換,不是等於。所以不能唯一確定物件是不是同乙個物件。他們之間的關係...
重寫hashCode 方法和equals 方法
1 object類中有hashcode 和equals方法 public native int hashcode 根據位址進行運算得到的偽隨機數 public boolean equals object obj a.equals b ab物件內容相同,可能是同乙個位址,這種情況hashcode一定相...