最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java自定義實(shí)現(xiàn)equals()方法過(guò)程解析

 更新時(shí)間:2020年02月09日 09:46:01   作者:filozofio  
這篇文章主要介紹了Java自定義實(shí)現(xiàn)equals()方法過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java自定義實(shí)現(xiàn)equals()方法過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

以常見(jiàn)的自定義Date類型為例,沒(méi)有經(jīng)驗(yàn)的朋友可能會(huì)覺(jué)得直接比較年月日即可,從而寫(xiě)出以下的實(shí)現(xiàn)

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;
  }
}

但是想要健壯地實(shí)現(xiàn)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
  //規(guī)定參數(shù)必須是Object類型
  public boolean equals(Object obj) {
    //檢查是否相同引用
    if (obj == this) {
      return true;
    }
    //檢查null
    if (obj == null) {
      return false;
    }
    //getClass()判斷的是準(zhǔn)確的運(yùn)行時(shí)類型,instanceof的類型可以是父類或接口
    if (obj.getClass() != this.getClass()) {
      return false;
    }
    //這里類型轉(zhuǎn)換一定是安全的
    MyDate that = (MyDate) obj;
    //確認(rèn)關(guān)鍵字段都相等
    if (this.day != that.day) {
      return false;
    }
    if (this.month != that.month) {
      return false;
    }
    if (this.year != that.year) {
      return false;
    }
    return true;
  }
}

自定義equals方法的套路

  • 檢查是否是同一個(gè)引用,如果是,返回true
  • 檢查null值,如果是,返回false
  • 檢查類型是否相同,如果不同,返回false;如果相同,進(jìn)行類型轉(zhuǎn)換

對(duì)每個(gè)關(guān)鍵字段進(jìn)行比較:

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

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

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

(b)

建議

  • 如果一個(gè)字段的值完全依賴其他字段的值,可以不用比較
  • 優(yōu)先比較最可能出現(xiàn)差異的字段
  • 如果對(duì)象實(shí)現(xiàn)了compareTo()方法,可以直接拿來(lái)使用。例如x.compareTo(y) == 0

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Java中的private方法是否可以被代理

    淺談Java中的private方法是否可以被代理

    這篇文章主要介紹了淺談Java中的private方法是否可以被代理,在?Java?8之前,接口可以有常量變量和抽象方法,我們不能在接口中提供方法實(shí)現(xiàn),如果我們要提供抽象方法和非抽象方法(方法與實(shí)現(xiàn))的組合,那么我們就得使用抽象類,需要的朋友可以參考下
    2023-12-12
  • 一文理解kafka?rebalance負(fù)載均衡

    一文理解kafka?rebalance負(fù)載均衡

    這篇文章主要為大家介紹了kafka?rebalance負(fù)載均衡的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • No ‘Access-Control-Allow-Origin‘ header is present跨域及解決

    No ‘Access-Control-Allow-Origin‘ header is&nb

    這篇文章主要介紹了No ‘Access-Control-Allow-Origin‘ header is present跨域及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java IO流操作(PipeInputStream、SequenceInputStream、BufferedInputStream)

    Java IO流操作(PipeInputStream、SequenceInputStream、Buffered

    管道流主要用于線程間通信,分為管道輸入流(PipeInputStream)和管道輸出流(PipeOutputStream),本文介紹了如何通過(guò)管道流進(jìn)行數(shù)據(jù)發(fā)送和接收,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10
  • 淺談String類型如何轉(zhuǎn)換為time類型存進(jìn)數(shù)據(jù)庫(kù)

    淺談String類型如何轉(zhuǎn)換為time類型存進(jìn)數(shù)據(jù)庫(kù)

    這篇文章主要介紹了String類型如何轉(zhuǎn)換為time類型存進(jìn)數(shù)據(jù)庫(kù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringCloud實(shí)現(xiàn)文件上傳功能的方法詳解

    SpringCloud實(shí)現(xiàn)文件上傳功能的方法詳解

    這篇文章主要為大家詳細(xì)介紹了SpringCloud如何實(shí)現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的借鑒價(jià)值,需要的可以參考一下
    2022-08-08
  • springmvc的文件保存方法詳解

    springmvc的文件保存方法詳解

    這篇文章主要介紹了springmvc的文件保存方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 從Java到JSON一起探索Jackson的魔力

    從Java到JSON一起探索Jackson的魔力

    Jackson是一個(gè)用于處理JSON數(shù)據(jù)的開(kāi)源Java庫(kù),這篇文章主要為大家介紹了Java是如何利用Jackson處理JSON數(shù)據(jù)的,感興趣的小伙伴可以了解一下
    2023-05-05
  • java中單雙斜杠的使用圖文詳解

    java中單雙斜杠的使用圖文詳解

    JAVA中的斜杠有正斜杠與反斜杠之分,正斜杠,一般就叫做斜杠,下面這篇文章主要給大家介紹了關(guān)于java中單雙斜杠使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Netty分布式高性能工具類異線程下回收對(duì)象解析

    Netty分布式高性能工具類異線程下回收對(duì)象解析

    這篇文章主要介紹了Netty分布式高性能工具類異線程下回收對(duì)象解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03

最新評(píng)論

琼结县| 科技| 东辽县| 公安县| 应城市| 临高县| 安泽县| 于都县| 双柏县| 中宁县| 乌鲁木齐县| 广水市| 津南区| 布尔津县| 沛县| 台安县| 静安区| 宜春市| 麻江县| 北海市| 东山县| 漳浦县| 昌黎县| 札达县| 梅州市| 舞钢市| 珠海市| 鄂托克旗| 恭城| 柳江县| 金阳县| 浙江省| 兴和县| 庆云县| 尼木县| 富宁县| 三明市| 松原市| 寻乌县| 夏邑县| 应城市|