hashcode() 這個(gè)方法是用來鑒定 ?2 個(gè)對(duì)象是否相等樱蛤。
equals() 這個(gè)方法也是用來判斷 ? ?2個(gè)對(duì)象是否相等。
其實(shí)他們之間的用法是有區(qū)別的:
一般來講扛邑,equals這個(gè)方法是給用戶調(diào)用的怜浅,如果你想判斷2個(gè)對(duì)象是否相等,你可以重寫equals方法,然后在代碼中調(diào)用恶座,就可以判斷他們是否相等了搀暑。
簡(jiǎn)單來講,equals方法主要是用來判斷從表面上看或者從內(nèi)容上看跨琳,2個(gè)對(duì)象是不是相等自点。舉個(gè)例子:有個(gè)學(xué)生類,屬性只有姓名和性別脉让,那么我們可以認(rèn)為只要姓名和性別相等桂敛,那么就說這2個(gè)對(duì)象是相等的。
------------------------------------------------------------------------------------------
hashcode方法一般用戶不會(huì)去調(diào)用溅潜,比如在hashmap中术唬,由于key是不可以重復(fù)的,他在判斷key是不是重復(fù)的時(shí)候就判斷了hashcode這個(gè)方法
滚澜,而且也用到了equals方法碴开。這里不可以重復(fù)是說equals和hashcode只要有一個(gè)不等就可以了!所以簡(jiǎn)單來講博秫,hashcode相當(dāng)于是一個(gè)對(duì)象的編碼潦牛,就好像文件中的md5,他和equals不同就在于他返回的是int型的挡育,比較起來不直觀巴碗。我們一般在覆蓋equals的同時(shí)也要覆蓋hashcode,讓他們的邏輯一致即寒。舉個(gè)例子橡淆,還是剛剛的例子,如果姓名和性別相等就算2個(gè)對(duì)象相等的話母赵,那么hashcode的方法也要返回姓名的hashcode值加上性別的hashcode值逸爵,這樣從邏輯上,他們就一致了凹嘲。
要從物理上判斷2個(gè)對(duì)象是否相等师倔,用==就可以了。