java中有兩種相等的判斷-----“==”和“equals()方法”。大部分書上都會告訴我們,“==”是判斷兩個對象的引用是否相等,而“equals()”是判斷兩個對象是否相等。其中“==”很好理解,在此我就不再贅述了。我主要想說的是關于“equals()”,在java的Object類中“equals()”的實現如下:
1
public boolean equals(Object obj)
{
2
return (this == obj);
3
}
我們可以看到在Object中“equals()”的實現指示簡單的使用了“==”也就是之判斷了,兩個對象的引用相等。這也就是為什么我們在使用“equals()”時必須重寫這個方法的原因了。
在jdk的幫助文檔中,對于“equals()”和“HashCode()”有這樣的說法,如果兩個對象使用equals()返回為true,則使用HashCode()必然返回的值必然相等,反之則不一定啊。
為什么呢?其實舉個簡單的例子,我們有很多桶,每個桶都可以放很多對象,那么HashCode()得到的值就是每個桶的編號,這樣說也許您就明白了為什么jdk會有這樣的說法了。至于為什么會有這樣的設計,學過數據結構的朋友一定知道一些查找的方法吧,其中二分法就是一種高效的查找方法吧。那么HashCode也就是個“多分法”吧。
posted on 2008-02-08 16:05
alec的工作室 閱讀(496)
評論(0) 編輯 收藏 所屬分類:
java