欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中equals()知識點總結(jié)

 更新時間:2020年03月26日 08:35:00   投稿:laozhang  
在本篇文章里小編給大家分享的是關(guān)于Java中equals()知識點總結(jié)內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。

經(jīng)過幾天的學(xué)習(xí),終于對equals的用法有了比較全面的認識,并做一個總結(jié)。

1.equals的本意——即在Object對象中定義的equals()方法有什么樣的意義。

(此處先附上==的作用,后面仍有敘述。因為==和equals()方法的關(guān)系是很密切的,后面有我自己的看法。

==用于比較引用和比較基本數(shù)據(jù)類型時具有不同的功能:
比較基本數(shù)據(jù)類型,如果兩個值相同,則結(jié)果為true
而在比較引用時,如果引用指向內(nèi)存中的同一對象,結(jié)果為true)

public boolean equals(Object obj)

其比較規(guī)則為:當(dāng)參數(shù)obj引用的對象與當(dāng)前對象為同一個對象時,就返回true,否則返回false.

public class Fish {
 private int weight;
 private String color;

 

 public Fish(int weight, String color) {
  this.color = color;
  this.weight = weight;
 }

 public int getWeight() {
  return weight;
 }

 public void setWeight(int weight) {
  this.weight = weight;
 }

 

 public String getColor() {
  return color;
 }

 public void setColor(String color) {
  this.color = color;
 }

}

public class EqualsTest {
 public static void main(String[] args) {
  Fish f1 = new Fish(1, "blue");
  Fish f2 = new Fish(1, "blue");

 

  System.out.println(f1 == f2);
  System.out.println(f1.equals(f2));
 }
}

運行結(jié)果為

false
false

由此可見,equals()方法的本意為確定兩個對象的引用是否相同。

2.而JDK類中有一些類覆蓋了oject類的equals()方法,比較規(guī)則為:如果兩個對象的類型一致,并且內(nèi)容一致,則返回true,這些類有:

java.io.file,java.util.Date,java.lang.string,包裝類(Integer,Double等)

public class EqualsTest {
 public static void main(String[] args) {
  String s1=new String("sss");
  String s2=new String("sss");
  
  System.out.println(s1==s2);
  System.out.println(s1.equals(s2));
 }
}

運行結(jié)果為

false
false

由此可見,equals()方法的本意為確定兩個對象的引用是否相同。

2.而JDK類中有一些類覆蓋了oject類的equals()方法,比較規(guī)則為:如果兩個對象的類型一致,并且內(nèi)容一致,則返回true,這些類有:

java.io.file,java.util.Date,java.lang.string,包裝類(Integer,Double等)

public class EqualsTest {
  public static void main(String[] args) {
    String s1=new String("sss");
    String s2=new String("sss");
    
    System.out.println(s1==s2);
    System.out.println(s1.equals(s2));
  }
}

運行結(jié)果為

false
true

由此知道,在String中equals()方法被進行了覆蓋,使其意義變?yōu)楸容^兩個對象的內(nèi)容是否一致

3.如果我們要自己覆蓋equals()方法,讓其比較內(nèi)容或者有別的使用方法(當(dāng)然我們一般都是用于比較內(nèi)容的,但是覆蓋的方法中真正的實現(xiàn)究竟是什么樣的,誰知道呢O(∩_∩)O~)

public class Fish {
  private int weight;
  private String color;

 

  public Fish(int weight, String color) {
    this.color = color;
    this.weight = weight;
  }
  
  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((color == null) ? 0 : color.hashCode());
    result = prime * result + weight;
    return result;
  }
  
  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    Fish other = (Fish) obj;
    if (color == null) {
      if (other.color != null)
        return false;
    } else if (!color.equals(other.color))
      return false;
    if (weight != other.weight)
      return false;
    return true;
  }
  public int getWeight() {
    return weight;
  }

  public void setWeight(int weight) {
    this.weight = weight;
  }

  public String getColor() {
    return color;
  }

  public void setColor(String color) {
    this.color = color;
  }

}

public class EqualsTest {
  public static void main(String[] args) {
    Fish f1 = new Fish(1, "blue");
    Fish f2 = new Fish(1, "blue");

 

    System.out.println(f1 == f2);
    System.out.println(f1.equals(f2));
  }
}

運行結(jié)果為

false
true

此例子中我復(fù)寫了equals()方法和hashcode()方法,使得equals()方法脫離的本意,不再是比較兩個對象的引用是否相同,而是比較其內(nèi)容是否相同。

以上內(nèi)容為一般書上的總結(jié),下面是我自己想到的一些東西。

我們可以知道計算機歸根到底進行的只是一些二進制數(shù)的與或非運算,加法乘法運算。由此有了些基本的運算符,所有的函數(shù)本質(zhì)上其實現(xiàn)都是使用基本運算符來實現(xiàn)的。而==是基本運算符中的一個,它的作用:用于比較引用和比較基本數(shù)據(jù)類型時具有不同的功能:
比較基本數(shù)據(jù)類型,如果兩個值相同,則結(jié)果為true
而在比較引用時,如果引用指向內(nèi)存中的同一對象,結(jié)果為true

而equals()作為方法,我們可以推測知道,它其中的實現(xiàn)所使用的肯定是==運算符。再進一步的思考,equals()本意不正是==運算符進行對象比較時候的作用嗎。那么,既然是兩者有同樣的作用,為什么還要弄出一個equals()方法來呢。因為==運算符不允許我們進行覆蓋,也就是說它限制了我們的表達。在上面的第三個例子中,我們復(fù)寫equals()方法,達到比較對象內(nèi)容是否相同的目的。而這些通過==運算符是做不到的。

到此這篇關(guān)于Java中equals()知識點總結(jié)的文章就介紹到這了,更多相關(guān)Java中的equals()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談springboot與微服務(wù)架構(gòu)

    淺談springboot與微服務(wù)架構(gòu)

    這篇文章主要介紹了淺談springboot與微服務(wù)架構(gòu),SpringBoot是由 Pivotal團隊提供的框架,其設(shè)計?的是?來簡化新Spring應(yīng)?,初始搭建以及開發(fā)過程,該框架使?了特定的?式來進?配置,需要的朋友可以參考下
    2023-07-07
  • 詳解OAuth2 Token 一定要放在請求頭中嗎

    詳解OAuth2 Token 一定要放在請求頭中嗎

    這篇文章主要介紹了詳解OAuth2 Token 一定要放在請求頭中嗎,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 利用POI生成EXCEL文件的方法實例

    利用POI生成EXCEL文件的方法實例

    Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能,下面這篇文章主要給大家介紹了關(guān)于利用POI生成EXCEL文件的相關(guān)資料,需要的朋友可以參考下
    2018-07-07
  • SpringBoot使用MockMvc進行單元測試的實例代碼

    SpringBoot使用MockMvc進行單元測試的實例代碼

    在Spring Boot應(yīng)用程序中,使用MockMvc進行單元測試是一種有效的方式,可以驗證控制器的行為和API的正確性,在這篇博客中,我們將介紹如何使用MockMvc對用戶控制器進行測試,感興趣的朋友可以參考下
    2024-01-01
  • Java中5種輸出換行方式小結(jié)

    Java中5種輸出換行方式小結(jié)

    在Java中,輸出換行符是一項非?;镜牟僮?它在控制臺中輸出文本時非常常見,本文主要介紹了Java中5種輸出換行方式小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • SpringBoot整合RabbitMQ實現(xiàn)交換機與隊列的綁定

    SpringBoot整合RabbitMQ實現(xiàn)交換機與隊列的綁定

    這篇文章將通過幾個實例為大家介紹一些SpringBoot中RabbitMQ如何綁定交換機(交換器)與隊列,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-05-05
  • Springboot打包部署代碼實例

    Springboot打包部署代碼實例

    這篇文章主要介紹了Springboot打包部署代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java實現(xiàn)warcraft?java版游戲的示例代碼

    Java實現(xiàn)warcraft?java版游戲的示例代碼

    致敬經(jīng)典的warcraft,《warcraft?java版》是一款即時戰(zhàn)略題材單機游戲,采用魔獸原味風(fēng)格和機制。本文將用java語言實現(xiàn),采用了swing技術(shù)進行了界面化處理,感興趣的可以了解一下
    2022-09-09
  • druid ParserException類錯誤問題及解決

    druid ParserException類錯誤問題及解決

    這篇文章主要介紹了druid ParserException類錯誤問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java進階核心之InputStream流深入講解

    Java進階核心之InputStream流深入講解

    這篇文章主要給大家介紹了關(guān)于Java進階核心之InputStream流的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評論