天天看點

比較無處不在-靈活覆寫equals方法 | 帶你學《Java面向對象程式設計》之五十一

上一篇:萬類之祖-Object簡介 | 帶你學《Java面向對象程式設計》之五十

【本節目标】

通過閱讀本節内容,你将了解到對象之間進行比較的幾個次元,并能夠通過覆寫equals方法實作較為嚴謹的比較方法與較為緊密的對象封裝。

對象比較:equals()

Object類之中另外一個比較重要的方法就是在于對象比較的處理上,所謂的對象比較主要的功能是比較兩個對象的内容是否完全相同。如果現在有兩個Person對象,要想确認這兩個對象是否一緻,但是兩個對象本身會有不同的記憶體位址數值,是以此時的比較應該是通過内容的比較完成的。

範例:對象比較的基礎實作

class Person {
    private String name ;
    private int age ;
    public Person (String name , int age ) {
        this.name = name ;
        this.age = age ;
    }
    @Override    
    public String toString() {
        return “姓名:” + this.name + “、年齡:” + this.age ;
    }
    public String getName () {
        return this.name ;
    }
    public int getAge () {
        return this.age ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        Person perA = new Person(“張三” , 20) ;
        Person perB = new Person(“張三” , 20) ;
        if (perA.getName().equals(PerB.getName())&&perA.getAge() == 
perB.getAge()) {
            System.out.println(“是同一個對象。”) ;
        }else{
            System.out.println(“不是同一個對象。”) ;
        }
    }
}           

執行結果:是同一個對象。

此時的确實作了對象比較的功能,但是這個功能比較麻煩。

  • 由于需要進行對象比較的時候要将每一個屬性都進行相等判斷,是以在外部要調用大量的getter方法;
  • 對象比較應該是一個類内部所具備的功能,而不應該在外部定義;

Object類作為所有類的父類提供了對象比較操作的支援,對于對象比較的操作實作可以使用equals()方法完成。

  • 對象比較: public boolean equals(Object obj),可以接收所有類型;預設情況下該方法隻是進行了兩個對象的位址判斷。
public boolean equals(Object obj) {
    return (this == obj) ; 
}           

也就是說對于實際的使用者而言,如果要想正确實作判斷處理,那麼就必須要在子類中覆寫此方法,并且進行屬性判斷。

範例:觀察Object類中的equals()方法覆寫

class Person {
    private String name ;
    private int age ;
    public Person (String name , int age ) 
{
        this.name = name ;
        this.age = age ;
    }
    @Override    
    public String toString() {
        return “姓名:” + this.name + “、年齡:” + this.age ;
    }
//equals()方法這個時候會有兩個對象:目前對象this、傳入的object
    public boolean equals (Object obj) {
        if (!(obj instanceof Person)) {   //比較同一類
            return false ;
        }
        if (obj == null) {     //不關心null比較
           return false ;
        }
        if (this == obj) {     //同一個位址
           return true ;
        }
        Person per = (Person) obj ;   //目的是為了擷取類中的屬性
        return this.name.equals(per.name) && this.age == per.age ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        Person perA = new Person(“張三” , 20) ;
        Person perB = new Person(“張三” , 20) ;      
        System.out.println(perA.equals(perB)) ;          //true
    }
}           

String類作為Object子類,那麼這個類裡面實際上已經覆寫了equals()方法。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:高度概括藝術-初識抽象類 | 帶你學《Java面向對象程式設計》之五十二 更多Java面向對象程式設計文章檢視此處