首頁 >Java >Java基礎 >java如何判斷物件是否相等

java如何判斷物件是否相等

王林
王林原創
2019-11-21 09:23:123842瀏覽

java如何判斷物件是否相等

1、equals的作用及與==的區別

equals被用來判斷兩個物件是否相等。

equals通常用來比較兩個物件的內容是否相等,==用來比較兩個物件的位址是否相等。

equals方法預設等同於「==」。

Object類別中的equals方法定義為判斷兩個物件的位址是否相等(可以理解成是否為同一個物件),位址相等則認為是物件相等。這也意味著,我們新建的所有類別如果沒有複寫equals方法,那麼判斷兩個物件是否相等時就等同於“==”,也就是兩個物件的位址是否相等。

Object類別中equals的方法實作如下:

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

但在我們的實際開發中,通常會認為兩個物件的內容相等時,則兩個物件相等,equals傳回true 。物件內容不同,則傳回false。

所以可以總結為兩種情況

1、類別未重寫equals方法,則使用equals方法比較兩個物件時,相當於==比較,即兩個對象的地址是否相等。位址相等,回傳true,位址不相等,回傳false。

2、類別複寫equals方法,比較兩個物件時,走複寫之後的判斷方式。通常,我們會將equals複寫成:當兩個物件內容相同時,則equals傳回true,內容不同時,傳回false。

舉個例子:

public class EqualTest {
public static void main(String[] args) {
Person p1 = new Person(10,"张三");
Person p2 = new Person(10,"张三");
System.out.println(p1.equals(p2));
}
}
class Person{
int age;
String name;
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

Person未複寫equals方法,則預設使用了Object中的equals,即為兩個物件(p1和p2)的記憶體位址判斷, p1和p2很明顯記憶體位址不同,所以輸出結果很明顯為false。

如果我們複寫equals方法呢?我們認為名字和年齡一樣的就是同一個人,那麼p1和p2都表示10歲的張三,這兩個物件應該是相等的。複寫的equals方法如下:

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

同樣的,執行上述用例,得到的結果是true。

BTW:如果equals方法回傳true,那麼==是否也是true?

不一定是true。 equals回傳true有兩種可能,一種是兩個物件位址相同,一種是兩個物件內容相同。當內容相同時,位址可能不同,所以==比較的結果可能為false。

我們把main方法加上對==的判斷,如下:

public static void main(String[] args) {
Person p1 = new Person(10,"张三");
Person p2 = new Person(10,"张三");
System.out.println(p1.equals(p2));
System.out.println(p1 == p2);
}

輸出結果很明顯 p1==p2的結果是false。

推薦教學:java入門教學

以上是java如何判斷物件是否相等的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn