關(guān)于.hashcode()和equals()的問題
今天看代碼的時(shí)候忽然發(fā)現(xiàn)有些類會(huì)重寫equals方法和hashcode方法以及相應(yīng)的toString方法,對(duì)于我來說完全不明白為什么要這么做,我查了下資料,終于找到了原因!
equals是Object類就有的方法是用來檢測一個(gè)對(duì)象是否等于另外一個(gè)對(duì)象,在Object類中,這個(gè)方法將判斷兩個(gè)對(duì)象
是否具有相同的引用。對(duì)于需要檢測兩個(gè)對(duì)象狀態(tài)的時(shí)候,那么就要重新去實(shí)現(xiàn)一下這個(gè)方法了。比如說2個(gè)雇員對(duì)象如果
ID相同,那么他們肯定是相同的。那么我僅僅只需要判斷ID就好了,那么我就重寫咯,o(∩_∩)o。
而且JAVA語言規(guī)范對(duì)equals方法還具有一下特性:
1.自反性:對(duì)于任何非空引用x,x.equals(x)應(yīng)該返回true;
2.對(duì)稱性:對(duì)于任何引用x,y,如果x.equals(y)返回true,那么y.equals(x)也應(yīng)該返回同樣的結(jié)果;
3.傳遞性:對(duì)于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也應(yīng)該返回true;
4.一致性:如果x和y引用的對(duì)象沒有發(fā)生變化,那么反復(fù)調(diào)用x.equals(y)應(yīng)該返回同樣的結(jié)果。
5.對(duì)于任意非空引用x,x.equals(null)應(yīng)該返回true.
然后有一系列的對(duì)比方式來解決繼承和超類的比較
接下來就是關(guān)于hashcode了對(duì)于每一個(gè)對(duì)象來說都有它相對(duì)應(yīng)唯一的hashcode,也叫做散列碼,它也作為對(duì)象在內(nèi)存當(dāng)
中的存儲(chǔ)地址。那么你override了equals方法,你也應(yīng)該override掉hashcode方法,以便用戶可以將對(duì)象插入到散列表中
(hashmap).
歡迎喜歡旅游的朋友來這里參觀

posted on 2008-04-17 23:22 Cloud kensin 閱讀(247) 評(píng)論(0) 編輯 收藏