日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

《Effective Java》—— 对于所有对象都通用的方法

發布時間:2023/12/9 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《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對象換成其他的類型
@Override public boolean equals(Object o){if(o == this)return true;if(!(o instanceof XX))return false;XX xx = (XX)o;return xx.x.equals(o.x);//TODO }

覆蓋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》—— 对于所有对象都通用的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。