(基礎)java中的equals與hashcode

2021-09-01 20:24:59 字數 1219 閱讀 1703

hashcode()用於計算該物件的雜湊值,當以雜湊表為底層資料結構儲存資料時,就需要用到雜湊值,如hashset,hashmap等集合容器。

hashcode() 與 equals() 為什麼要一起重寫呢?

通常,是基於這樣的考慮:

如果該物件使用雜湊表的進行儲存,那麼需要通過hashcode()計算雜湊碼,得到物件的位址,當位址相同時,就需要進一步呼叫該物件的equals()來比較內容是否相同。

因此,才推薦將2個方法一起重寫,在使用hash結構的集合儲存時,才不會出現問題。

自定義雜湊值的計算方式---複寫hashcode()

自定義物件是否相同的比較規則---複寫equals()

物件之間的比較,可以比較位址,也可以自定義比較規則

==  比較的是物件在記憶體中的位址是否相同,位址相同,則物件一定相同

equals 比較的內容,由equals方法內部指定,可以比較位址(object基類中的預設實現),也可以自定義比較規則,因此,equals方法提供了物件之間比較的擴充套件功能。

比如,string類複寫了object基類中的equals()

public boolean equals(object anobject) 

if (anobject instanceof string)

return true;}}

return false;

}

字串比較時,使用==與equals()進行比較的區別

public class test 

}

通過複寫equals(),自定義物件是否相同的比較規則

public class person 

public person(string name)

@override

public int hashcode()

/*** 自定義person是否相同的比較規則

*/@override

public boolean equals(object obj)

}

public class test 

}

java中equals 與 的區別

public class teststring 這個程式真是簡單啊!可是有什麼問題呢?1.來自 string 的憂慮 上面這段程式中,到底有幾個物件呢?可能很多人脫口而出 兩個,s1 和 s2 為什麼?string 是 final 類,它的值不可變。看起來似乎很有道理,那麼來檢測一下吧,稍微改動一下...

Java中 與equals的區別

equals和 是兩個很容易混淆也是很多初學者容易搞不清的比較 方法 下面舉個例子,大家就一目了然了 比如 integer int1 new integer 1 integer int2 new integer 1 string str1 new string hello string str2 n...

Java中 與 equals的區別

比較的是引用,較equals嚴格,要求兩個比較物件指向同乙個物件的位址。equals 比較的是值相等,可以是兩個不同的物件引用。注意有一點 equals是object物件的成員方法,也就是說我們可以通過重寫equals 改變判斷兩個物件的值相等的標準,完全有可能兩個物件的值理論上不相等 如3!5 通...