【本節目标】
通過閱讀本節内容,你将了解到對象之間進行比較的幾個次元,并能夠通過覆寫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面向對象程式設計文章檢視此處