equals和hashcode方法說明

只是爲了維護 hashCode 方法的常規協定,纔要求用equals比較的兩個對象的hashCode相同.

equals()和hashCode()都來自java.lang.Object.你當然可以重寫.

比如a.equals(b).僅當a的內存地址相等時,才返回true.當然如String等類已經對這個方法進行了重寫,比較的就不再是內存地址了.

hashCode()的值也是與內存地址相關的.所以僅當內存地址相等時,hashCode才相等.同樣很多類也重寫了這個方法,還是以String爲例:
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;

for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
就不在與內存地址相關了.這樣做是爲了保證用equals比較返回爲true的兩個對象,他們的hashCode是相同的.

所以一般重寫equals的時候都會重寫hashCode().

當然,這個相當於一個約定,一個協議.你不這麼做並不會錯.

發佈了34 篇原創文章 · 獲贊 23 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章