前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
上接《Effective Java》 第一講:創建和銷毀對象
?
八、覆蓋 equals 時請遵守通用約定
1. 自反性:對于任何非空的引用 x 都有 x.equals( x ) 都必須返回 true 。 ?( 參見:什么是自反、反自反? )
2. 對稱性:對于任何非 null 的引用值 x 和 y ,當且僅當y.equals(x)返回true時,x.equals(y)必須返回 true。
3. 傳遞性:x,y,z, 如果 x.equals(y) 為 true , y.equals(z) 為 true,那么 x.equals(z) 必須為 true。
4. 一致性:引用值 x 和y,未修改值 ,則多次調用 x.equals(y),結果必須一致。
5. 對于任何非 null 的引用值x,x.equals(null) 必須返回 false。
?
實現高質量equals方法的訣竅:
1. 使用==操作符檢查“參數是否為這個對象的引用”
2. 使用instanceof操作符檢查“參數是否為正確的類型”
3. 把參數轉換成正確的類型
4. 對于該類中的每個”關鍵”域,檢查參數中的域是否與該對象中對應的域相匹配
5. 當你編寫完成了equals方法之后,應該問自己三個問題:它是否是對稱的、傳遞的、一致的。
?
?
九、覆蓋 equals( ) ?時總要 覆蓋 hashCode( )?