《Effective Java》—— 对于所有对象都通用的方法
生活随笔
收集整理的這篇文章主要介紹了
《Effective Java》—— 对于所有对象都通用的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本節主要涉及Object中通用的一些方法,比如equals,hashCode,toString,clone,finalize等等
覆蓋equals時請遵守通用約定
equals方法實現的等價關系:
- 自反性:對于所有的非null,a=a
- 對稱性:a=b,則b=a
- 傳遞性:a=b,b=c,則a=c
- 一致性:對于沒有被修改的ab,如果a=b,則一直a=b
- 非空性:對于任何非Null,a!=null
高質量equals方法的訣竅:
- 使用==操作符檢查——“參數是否為這個對象的引用”
- 使用instanceof檢查——“參數是否為正確的類型”
- 參數轉換成正確的類型
- 對于每個關鍵域,檢查參數中的域是否與對象的域相匹配
- 寫完后,問自己:是否對稱、是否傳遞、是否一致
忠告:
- 覆蓋equlas時,總是覆蓋hashCode
- 不要企圖讓equals過于智能
- 不要將equals中的Object對象換成其他的類型
覆蓋equals時總是要覆蓋hashCode
hashCode主要用于放在HashMap,HashSet,HashTable中時,計算hash值。
@Override public int hashCode(){int result = 17;result = 31*result+eee;result = 31*result+xxx;return result; }其中17是隨便寫的,31是有說道的,因為31是個奇素數,并且:
31*i==(i<<5)-i這樣JVM在優化的時候效率會更高。
始終覆蓋toString()
因為toString方法應該返回對象的關鍵信息
謹慎的覆蓋clone
應該滿足:
x.clone() != x x.clone().getClass() == x.getClass() x.clone().equals(x)另外clone方法相當于另一種構建器,不應該對原來的對象產生影響。
考慮實現Comparable接口
常用的List等等可以通過實現Comparable接口進行排序:
public interface Comparable<T{int compareTo(T t); }當對象小于,等于或者大于時,應該返回一個負整數,零或者正整數。
總結
以上是生活随笔為你收集整理的《Effective Java》—— 对于所有对象都通用的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim cscope taglist 使
- 下一篇: Bash字符串处理(与Java对照) -