重寫 equals 方法約定
- 任何非null的引用值x,x.equals(null)必須返回false。
- 自反性:任何非null的引用值,x.equals(x) 必須返回 true。
- 對稱性:任何非null的引用值 x 和 y,當 x.equals(y) 返回 true 時,y.equals(x) 必須返回 true。
- 傳遞性:任何非null的引用值 x、y 和 z,如果 x.equals(y) 返回true, y.equals(z) 返回true,那麼 x.equals(z) 必須返回true。
- 一致性:任何非null的引用值 x 和 y,只要equals方法中用到的屬性沒有被改變,多次調用equals方法應一致的返回true或false。
重寫equals方法的同時還應該重寫hashCode方法
- 多次調用同一個對象equals方法時,只要equals用到的數值沒用變,hashCode方法必須始終返回同一個值。
- 如果兩個對象根據 equals(Object )方法比較相等,那麼調用者兩個對象的hashCode必須返回相同的整數。
- 如果兩個對象根據 equals(Object )方法比較是不相等的,那麼調用這兩個對象
中的 hashCode 方法,則不一定要求 hashCode 方法必須產生不同的結果 但是程
序員應該知道,給不相等的對象產生截然不同的整數結果,有可能提高散列表( hashtable )的性能。