天天看點

對象與對象間的比較對象間如何進行比較相等 equals不等 compaerTo/compare

對象間的比較

  • 對象間如何進行比較
  • 相等 equals
    • 職責
    • 定義
    • 重寫equals
  • 不等 compaerTo/compare
    • compareTo
      • 實作
    • compare

對象間如何進行比較

在Java中,我們隻能通過引用去通路對象,但是引用沒辦法使用">’’ ,"<" 進行比較。

即使通過“ = =”和“!=”比較,也不是進行對象間的比較,而是判斷是否指向同一對象。

相等 equals

對象間如何進行 相等 OR 不等的比較呢,我們可以使用 equals方法。

在Object類中,提供了equals方法。傳回 true:對象相等。傳回:false,對象不等。

職責

作為類的定義者,我們有責任重寫Object類下的equals方法,定義對象相等,隻有定義類,才知道類->對象中有那些屬性。

作為類的使用者,有責任,當比較對象是否相等的時候,必須使用equals方法,不能簡單使用“==”和“!=”比較。

定義

如果在類的定義時候,沒有重寫過equals方法,那麼會調用Object中的預設的equals方法

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

預設實作,比較兩個引用是否指向同一個對象

當類的定義的時候,重寫過equals方法,如:String類中:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
           

它的作用是先判斷兩個引用是否指向同一個對象,然後判斷對象類型是否為String,然後判斷對象長度,最後每個字元的比較。

重寫equals

當重寫equals時候,一般使用IDEA幫助我們重寫,它有自己一套生成模闆。

例如:

對象與對象間的比較對象間如何進行比較相等 equals不等 compaerTo/compare

不等 compaerTo/compare

關于對象直接進行“>”,“<”,“=”的比較:

compareTo

實作

作為類的定義者,可以直接聲明該類具有支援該功能(具備比較的能力)

實作一個Comparable的接口

public class XXX implements Comparable{

}
           

在這個接口下有一個抽象方法:

對象與對象間的比較對象間如何進行比較相等 equals不等 compaerTo/compare

我們需要重寫這個compareTo方法。

this和o比較,this < o 傳回負數

this > o傳回正數

this = o傳回0;

作為類的調用者,如果一個類中實作了Comparable接口,則我們可以嗲用compareTo方法比較,并根據傳回值的大小決定大小關系。

compare

當我們還是想比較兩個對象,但是我們并不想按照指定的預設規則比較。

在Java中提供了一種機制,解決該問題,我們可以定義一個類,則該類實作Comparator接口。

public class XXX implements Comparator{

}
           

Comparator可以了解為構造器,其中有構造方法:

對象與對象間的比較對象間如何進行比較相等 equals不等 compaerTo/compare

傳入兩個對象,交給你比較,根據自己實際需求重寫,完成比較。