java里equals和hashCode之間什么關系


如果要比較實際內存中的內容,那就要用equals方法,但是!!!

如果是你自己定義的一個類,比較自定義類用equals和==是一樣的,都是比較句柄地址,因為自定義的類是繼承於object,而object中的equals就是用==來實現的,你可以看源碼。

那為什么我們用的String等等類型equals是比較實際內容呢,是因為String等常用類已經重寫了object中的equals方法,讓equals來比較實際內容。

在一般的應用中你不需要了解hashcode的用法,但當你用到hashmap,hashset等集合類時要注意下hashcode。

你想通過一個object的key來拿hashmap的value,hashmap的工作方法是,通過你傳入的object的hashcode在內存中找地址,當找到這個地址后再通過equals方法來比較這個地址中的內容是否和你原來放進去的一樣,一樣就取出value。搜索

所以這里要匹配2部分,hashcode和equals
但假如說你new一個object作為key去拿value是永遠得不到結果的,因為每次new一個object,這個object的hashcode是永遠不同的,所以我們要重寫hashcode,你可以令你的hashcode是object中的一個恆量,這樣永遠可以通過你的object的hashcode來找到key的地址,然后你要重寫你的equals方法,使內存中的內容也相等。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM