若有錯誤,歡迎指正。
object類中的equals()方法預設比較的是物件之間的引用是否一樣,但在實際開發中需要比較的是物件之間的狀態是否一樣。這就要求我們覆寫equals()方法。
考慮繼承層次下的equals()方法應如何書寫?
1、父類的equals()方法比較共有屬性部分,等待子類中的equals()呼叫
2、子類各自覆寫equals()方法比較新增屬性部分
下面以person, student, teahcer這三個類舉例
person類
package com.test.equals;
public class person
@override
public boolean equals(object obj)
if (obj == null)
// 採用getclass()方法來比較雙方是否屬於同乙個類
if (this.getclass() != obj.getclass())
person person = (person) obj;
return this.name.equals(person.name) && (this.age == person.age);
} public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
}
student類
package com.test.equals;
public class student extends person
public int getscore()
public void setscore(int score)
@override
public boolean equals(object obj)
return false;
}}
teacher類
package com.wujilin.equals;
public class teacher extends person
@override
public boolean equals(object obj)
return false; }
public int getsalary()
public void setsalary(int salary)
}
注意:
1、super關鍵字,並不是指父類物件的引用,它只是告訴編譯器要去呼叫父類的方法的關鍵字。
2、考慮到繼承,所以採用getclass()進行檢測,而不是使用instanceof關鍵字來比較,這是因為子類有自己的相等概念。
舉個例子,如果使用的是instanceof關鍵字,父類中的equals()方法應該為:
@override
public boolean equals(object obj)
if (obj == null)
if (obj instanceof person)
return false;
}
當student子類物件和teacher子類物件的名字和年齡都一樣的情況下,那麼要如何在子類中所覆寫的equals()方法再進一步比較這兩個物件呢?
所以,如果是由超類來決定相等的概念的話,那麼就可以使用instanceof關鍵字進行比較了。
書寫乙個儲存過程
delimiter console 轉換為 定義儲存過程 引數 in輸入引數 out輸出引數 row count 返回上一條修改型別sql delete,insert,update 的影響條數 row count 0 未修改資料 0 表示sql出錯 0 表示修改了行數 create procedur...
乙個equals方法引發的錯誤
今天在寫乙個狀態判斷的時候,沒有注意到其中乙個物件為short,另外乙個是基本型別int,導致雖然數值相等但是equals方法返回false,查詢short方法和equals方法後得知,大多數類都重寫了equals方法,重寫的時候一般第一步就是判斷型別是否相同,不同就返回false。所以雖然shor...
Linux下書寫乙個簡單的makefile
在linux下我們經常需要 編譯 而談起編譯就離不開 makefile 了,簡單來說 makefile 是編譯的乙個引導檔案,關於它的詳細介紹網上有許多資料,這裡只為介紹如何書寫乙個簡單的 makefile sources include libs objects sources cpp o tar...