1. 程式人生 > >Java雙等號,Equals(),HashCode()小結

Java雙等號,Equals(),HashCode()小結

.cn http java 字符 存取 進行 hashmap 存在 blog

默認情況

- 雙等號==,比較的是內存地址。 - equals(),默認比較的是內存地址。 - hashCode(),默認返回的是object的內存地址。

String中方法改寫的情況

經常會遇到需要override equals()和hashCode()的情況,比如String就改寫了這兩個方法。 String equals() 的實現是首先判斷兩個字符串內存空間是否一致,然後對每一位字符進行比較。 String hashCode() 的實現是對每一位字符*31然後累加。

Equals()和HashCode()的契約

Java中兩者有一個契約: - 如果兩個對象相等的話,即equals()返回true的時候,它們的hashCode()必須相等。 - 但如果兩個對象的hashCode()相等的話,這兩個對象(用equals()判斷)不一定相等。 舉例來說,在HashMap中存取鍵值對的時候用到了這兩個方法: - 用hashCode()計算Entry在數組中的位置 - 可能出現碰撞的情況,即多個Entry的hash code相同,存在同一個”格”中 - 這時,需要用equals()來判斷key是否相同 一般來說equals()和hashCode()的override都是綁定出現的,因為要保證上述的契約關系。

參考

- http://www.cnblogs.com/xudong-bupt/p/3960177.html - http://www.importnew.com/8701.html

Java雙等號,Equals(),HashCode()小結