java equals方法是什麼

2023-03-10 14:00:56

java equals方法是object類中的方法,只能用於判斷參照型別;equals方法預設判斷的是地址是否相等,子類中往往重寫該方法,用於判斷內容是否相等,其使用語法如「public boolean equals(Object obj) {return (this == obj);}」。

本教學操作環境:Windows10系統、java8、Dell G3電腦。

Java中的equals方法

一、"=="運運算元

"=="是一個比較運運算元。

  • "=="既可以判斷基本型別,又可以判斷參照型別。
  • "=="如果判斷基本型別,判斷的是值是否相等。eg: int i=10; double d=10.0
  • "=="如果判斷參照型別,判斷的是地址是否相等,即判定是不是同一個物件。

二、equals方法

  • equals是object類中的方法,只能用於判斷參照型別
  • equals方法預設判斷的是地址是否相等,子類中往往重寫該方法,用於判斷內容是否相等。比如String和Integer類中的equals原始碼。

Object類中的equals方法的原始碼:

Object類中的equals方法預設就是比較物件地址是否相同。

    public boolean equals(Object obj) {
        return (this == obj);
    }
登入後複製
"hello".equals("abc");
登入後複製

解釋:this指的就是當前物件,this是指equals方法是誰呼叫的,上面的hello呼叫的equals,所以this指的是字串hello,而==右邊的obj物件,是傳入的abc。

三、重寫equals方法練習

練習一:

package object;
/*
判斷兩個person物件的內容是否相等
如果兩個person物件的各個屬性值都一樣,則返回true,反之返回false
 */
public class EqualsExercise {
    public static void main(String[] args) {
        Person person1 = new Person("jack", 10, '男');
        Person person2 = new Person("jack", 10, '男');
        System.out.println(person1.equals(person2));   //輸出結果是true
    }
}

class Person {
    private String name;
    private int age;
    private char gender;

    //重寫Object的equals方法
    public boolean equals(Object obj) {
        //如果比較的兩個物件是同一個物件,則直接返回true
        if (this == obj){   //this就代表呼叫equals方法的那個物件,obj就是方法裡面的實參
            return true;
        }
        //型別判斷
        if (obj instanceof Person){  //obj是Person,我們才比較
            //進行 向下轉型(即obj轉成Person); 因為我需要得到obj的各個屬性,如果不轉型,拿不到
            Person p = (Person) obj;
            return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
        }
        //如果不是person,則直接返回false;總不能拿一個人跟一個狗比
        return false;
    }


    public Person(String name, int age, char gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }
}
登入後複製

Tips:

instanceof的用法:result = object instanceof class

instanceof左邊是物件,右邊是類;當物件是右邊類或子類所建立物件時,返回true;否則,返false。

練習二:

c15b90a891fd3ea1c7383b7c88f4687.jpg

解釋:

  • sout1:p1和p2都是物件,因此==判斷的是地址是否相同,false
  • sout2:p1.name和p2.name都是字串,因此這裡的equals呼叫的是String類的中的equals方法,判斷的是內容是否相同,true
  • sout3:p1和p2都是物件,因此這裡的equals是Object類中的equals方法,判斷的是地址是否相同,false
  • sout4:s1和s2都是String類的物件,因此這裡的equals呼叫的是String類的中的equals方法,判斷的是內容是否相同,true
  • sout5:s1和s2都是物件,因此==判斷的是地址是否相同,false

練習三:

13fc63853b32c9dce4679b1ed1cbbc4.jpg

解釋:

  • sout1:65和65.0是相等的,true
  • sout2:字元的本質還是數位,查閱AscII表,A就是12,true
  • sout3:沒啥說的
  • sout4:沒啥說的
  • sout5:沒啥說的
  • sout6:都不是同一種型別,==直接編譯錯誤

相關推薦:《》

以上就是java equals方法是什麼的詳細內容,更多請關注TW511.COM其它相關文章!