首頁 > Java > java教程 > 主體

Java中的equals()

高洛峰
發布: 2016-12-16 09:13:02
原創
1168 人瀏覽過

經過幾天的學習,終於對equals的用法有了比較全面的認識,並做一個總結。

1.equals的本意-即在Object物件中定義的equals()方法有什麼樣的意義。

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

    ==用於比較引用和比較基本資料型別時有不同的功能:
     比較基本資料型別,若兩個值相同,結果為true
     而在比較引用時,若引用指向記憶體中的相同對象,結果為true)

 boolean equals(Object obj)

   其比較規則為:當參數obj引用的物件與目前物件為同一物件時,就回傳true,否則回傳false.

public class Fish {

  color;


 

    public Fish(int weight, String color) {

        this.color = color;

  getWeight() {

        return weight;
    }

    public void setWeight(int weight) {

        this.weight = weight;

    }

 

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

    }

}


public class EqualsTest {
    public static void main(String[] args) {

        Fish 


 

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

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

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

   System。 —

false
false

由此可見,equals()方法的本意為確定兩個物件的參考是否相同。

2.而JDK類別中有一些類別覆寫了oject類別的equals()方法,比較規則為:如果兩個物件的型別一致,且內容一致,則傳回true,這些類別有:
java.io. file,java.util.Date,java.lang.string,包裝類別(Integer,Double等)

public class EqualsTest {

    public static void main(String[] args) {

     );

        String s2=new String("sss");

        
        System.out.println(s1==s2);

    }

}

— ———————運行結果為——————

false

true

由此知道,在String中equals()方法被進行了覆蓋,使其意義變為比較兩個對象的內容是否一致

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

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

 

    public Fish(int Weight, String color) {
        this.color = color;
         public int hashCode() {
        Final int prime = 31;
       整數結果 = 1 ;
        結果= prime * 結果+ ((color == null) ? 0 : color.hashCode());
        
    @Override
    public boolean equals(Object obj){
If(this == obj)
回傳true;
如果(obj == null)
回傳false;
If(getClass()!=obj.getClass())
回傳false;
        魚類其他 = ( Fish) obj;
        if (color == null) {
        return false;
        } else if (!color.equals(other.color))
           回傳 false ;
       如果(重量!= other.weight)
            return false;
          return Weight;
    }

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

public String getColor() {
        return color;
    }

     }

}


public class EqualsTest {
    公共靜態無效主(String[] args ) {

        Fish f1 = new Fish(1, "blue");

        Fish f2 = new Fish(1, "blue"); ) ;
        System.out .println(f1.equals(f2));
    }

}


——————運行結果為——————

falsesetrue 寫了這個例子

equals()方法和hashcode()方法,實作equals()方法刪除的本意,以下不是比較兩個物件的引用是否相同,而是比較其內容是否相同。我自己想到的一些東西。基本的侵犯而==是基本運算符中的一個,它的作用:用於比較引用和比較基本資料類型時具有不同的功能:

     比較基本資料類型,如果兩個值相同,則結果為true

而在比較引用時,如果引用指向內存中的相同對象,結果為true

而equals()方法可以,我們推測知道,作為其中的實現所使用的肯定是==推斷。 ()本意不等於==進行物件比較時候的作用嗎。它限制了我們的表達方式。

更多Java中的equals()文章相關請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板