前言
在Java中,equals和hashCode方法是Object中提供的兩個方法,這兩個方法對以後的學習有很大的幫助,本文就深度來去講解這兩個方法。多說一句,我們直接從JDK的文檔來去解釋。
JDK中equals說明
equals方法解釋
下面的翻譯僅僅是對上面畫紅色的框中的內容進行解釋。
自反性 : x.equals(x) 結果應該返回true。 對稱性 : x.equals(y) 結果返回true若且唯若y.equals(x)也應該返回true。 傳遞性 : x.equals(y) 返回true,並且y.equals(z) 返回true,那麼x.equals(z) 也應該返回true。 一致性 : x.equals(y)的第一次調用為true,那麼x.equals(y)的第二次,第三次等多次調用也應該為true,但是前提條件是在進行比較之前,x和y都沒有被修改。 x.equals(null) 應該返回false。 這個方法返回true若且唯若x和y指向了同樣的對象(x==y),這句話也就是說明了在默認情況下,Object類中的equals方法默認比較的是對象的地址,因為只有是相同的地址才會相等(x == y),如果沒有重寫equals方法,那麼默認就是比較的是地址。注意:無論何時這個equals方法被重寫那麼都是有必要去重寫hashCode方法,這個是因為為了維持hashCode的一種約定,相同的對象必須要有相同的hashCode值。
JDK中hashCode說明
hashCode方法解釋
同樣是僅僅是挑重點,對紅色框中的內容解釋。
在同一次的java程序應用過程中,對應同樣的對象多次調用hashCode方法,hashCode方法必須一致性的返回同樣的一個地址值,前提是這個對象不能改變 兩個對象相同是依據equals方法來的,那麼其中的每一個對象調用hashCode方法都必須返回相同的一個integer值,也就是對象的地址。equals方法相等,那麼hashCode方法也必須相等。如果兩個對象依據equals方法返回的結果不相等,那麼對於其中的每一個對象調用hashCode方法返回的結果也不是一定必須得相等(也就是說,equals方法的結果為false,那麼hashCode方法返回的結果可以相同也可以不相同),但是,對於我們開發者來說,針對兩個對象的不相等如果生成相同的hashCode則可以提高應用程式的性能。
每日一題:
已知二叉樹後序遍歷序列是dabec,中序遍歷序列是debac,那麼問題是,它的前序遍歷序列是()
A. acbed
B. decab
C. deabc
D. cedba