91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何自定義實現equals()方法

發布時間:2021-09-27 14:12:48 來源:億速云 閱讀:122 作者:小新 欄目:編程語言

這篇文章主要介紹了Java如何自定義實現equals()方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

以常見的自定義Date類型為例,沒有經驗的朋友可能會覺得直接比較年月日即可,從而寫出以下的實現

public class MyDate implements Comparable<MyDate> {  private final int year;  private final int month;  private final int day;  public MyDate(int year, int month, int day) {    this.year = year;    this.month = month;    this.day = day;  }  @Override  public int compareTo(MyDate o) {    throw new NotImplementedException();  }  public boolean equals(Date that) {    if (this.day != that.day) {      return false;    }    if (this.month != that.month) {      return false;    }    if (this.year != that.year) {      return false;    }    return true;  }}

但是想要健壯地實現equals()方法,上述代碼是不夠的,參考以下代碼

//定義為final類型:允許子類直接使用父類equals()方法是不安全的public final class MyDate implements Comparable<MyDate> {  private final int year;  private final int month;  private final int day;  public MyDate(int year, int month, int day) {    this.year = year;    this.month = month;    this.day = day;  }  @Override  public int compareTo(MyDate o) {    throw new NotImplementedException();  }  @Override  //規定參數必須是Object類型  public boolean equals(Object obj) {    //檢查是否相同引用    if (obj == this) {      return true;    }    //檢查null    if (obj == null) {      return false;    }    //getClass()判斷的是準確的運行時類型,instanceof的類型可以是父類或接口    if (obj.getClass() != this.getClass()) {      return false;    }    //這里類型轉換一定是安全的    MyDate that = (MyDate) obj;    //確認關鍵字段都相等    if (this.day != that.day) {      return false;    }    if (this.month != that.month) {      return false;    }    if (this.year != that.year) {      return false;    }    return true;  }}

自定義equals方法的套路

檢查是否是同一個引用,如果是,返回true檢查null值,如果是,返回false檢查類型是否相同,如果不同,返回false;如果相同,進行類型轉換

對每個關鍵字段進行比較:

4.1 如果字段是基本類型,使用==

4.2 如果字段是對象類型,使用對象的equals()方法

4.3 如果字段是個數組,比較數組的每個元素。可以考慮使用Arrays.equals(a,b)或者Arrays.deepEquals(a,b),但不是a.equals

(b)

建議

如果一個字段的值完全依賴其他字段的值,可以不用比較優先比較最可能出現差異的字段如果對象實現了compareTo()方法,可以直接拿來使用。例如x.compareTo(y) == 0

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Java如何自定義實現equals()方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山西省| 瓮安县| 苏尼特左旗| 白玉县| 连山| 措美县| 黔南| 禄丰县| 丹江口市| 黑山县| 南江县| 淅川县| 贵德县| 壤塘县| 伊通| 保康县| 绥阳县| 清徐县| 枞阳县| 洛川县| 商洛市| 宁陕县| 香港| 来凤县| 渭源县| 天祝| 安乡县| 元江| 贡觉县| 双流县| 绵阳市| 章丘市| 巩义市| 长海县| 张北县| 龙胜| 福鼎市| 淮安市| 莎车县| 红河县| 阿拉善左旗|