如果要比較實際內存中的內容,那就要用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方法,使內存中的內容也相等。。。