簡單介紹java中的equals()方法

明小天666發表於2020-11-28

基本概念

equals()方法是Object類中的方法,通過Object類中的equals()方法我們可以知道,該方法是比較兩個物件的記憶體地址是否相等,下面簡單介紹一下這一個方法。
Object類中的equals()方法如下:

	public boolean equals(Object obj) {
        return (this == obj);
    }

equals()方法
Object類中的equals()方法是比較兩個物件的地址是否相等,這個比較方式不適合我們自定義類的物件的比較;例如,如果有一個類Person,類中有name和age兩個屬性,我們認為只要這個類的兩個物件中的name和age都分別相等,那麼他們就是相等的,所以不能使用Object類中的equals()方法用於判斷Person類的兩個物件是否相等,因為它是比較兩個物件的記憶體地址是否相等。這個時候就需要為自定義類重寫Object類中的equals()方法。
重寫equals()方法的程式碼如下(僅供參考):
注意:equals()方法的重寫取決於我們如何定義兩個物件是否相等,你可以比較類中的一個屬性是否相等,例如Person類中的name屬性,如果兩個物件中的name屬性相等,你可以認為這兩個物件相等。文中重寫的equals()方法是比較類中的所有屬性,即只有兩個物件中的所有屬性都相等,才可以認為這個類的兩個物件相等。

@Override
    public boolean equals(Object otherObject) {
    	// 判斷兩個物件是否為同一個物件
        if (this == otherObject) {
            return true;
        }
        // 判斷所比較物件是否為null
        if (otherObject == null) {
            return false;
        }
        // 判斷兩個物件是否屬於同一個類的物件
        if (this.getClass() != otherObject.getClass()) {
            return false;
        }
        // 強制型別轉換
        Person other = (Person) otherObject;
        // 進行屬性比較
        return Objects.equals(this.name, other.name)
                && this.age == other.age;
    }

下面簡單分析一下這段程式碼:第一個判斷主要是為了判斷所要進行比較的兩個物件是否為同一個物件,如果是同一個物件,直接返回true,下面的程式碼就沒有必要執行了,可以提高比較的效率;第二個判斷主要是判斷所比較物件是否為null,如果為null,直接返回false表示兩個物件不相等,因為第一個物件呼叫equals()方法,所以第一個物件不能為null,不然程式執行會報空指標,所以第二個物件為null,那麼這兩個物件肯定不相等;第三個條件用於判斷這兩個物件是否是同一個類的物件,如果不是同一個類,也沒有比較是否相等的意義;接下來就是將所比較物件進行強制轉換,最後進行類中各個屬性之間的比較,這裡有一點需要注意,就是name屬性在進行比較時,最好使用Objects類中的equals()方法進行比較,因為使用String類的equals()方法進行比較,如果第一個物件的name屬性的值為null,這個程式執行期間會報空指標異常。

相關文章