java_重寫equals()
阿新 • • 發佈:2021-01-03
技術標籤:java
重寫子類的equals()
==和equals的區別?
- 1.==比較基本資料型別 比較的是值 比如 int a = 20;int b = 30; a == b
- 2.==比較引用資料型別 比較的是記憶體中的地址
- 3.equals只能用於比較引用資料型別 因為equals是一個方法 需要使用物件名+點呼叫
- 4.equals屬於Object類提供的一個方法 本身也是比較地址
- 若使用equals()方法時,為字串型別,
- 那麼用的是JDK已經為我們寫好的 重寫的equals方法
- String類的equals也是重寫Object類的
- 只不過String類對equals方法進行了改造
- 比較的是兩個字串的內容 而不是比較地址
/**
* ==和equals的區別?
* 1.==比較基本資料型別 比較的是值 比如 int a = 20;int b = 30; a == b
* 2.==比較引用資料型別 比較的是記憶體中的地址
* 3.equals只能用於比較引用資料型別 因為equals是一個方法 需要使用物件名+點呼叫
* 4.equals屬於Object類提供的一個方法 本身也是比較地址
* 若使用equals()方法時,為字串型別,
* 那麼用的是JDK已經為我們寫好的 重寫的equals方法
* String類的equals也是重寫Object類的
* 只不過String類對equals方法進行了改造
* 比較的是兩個字串的內容 而不是比較地址
*
*/
public class Person {
private String name;
private String idCard;
//屬性封裝
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
//構造器
public Person() {
super();
}
public Person(String name) {
super();
this.name = name;
}
public Person(String name, String idCard) {
super();
this.name = name;
this.idCard = idCard;
}
@Override
// 重寫父類(Object中的equals方法)
public boolean equals(Object obj) {
/* 型別轉換 自動提升 手動下降
* 即子類 型別轉換為父類,可以自動轉換(子類 是 父類)
* 父類轉換為子類,需要(手動)強制轉換
*/
if(this == obj) {
/* 是同一個物件,地址相同 ,不必再進行如下比較*/
return true;
}
if(obj instanceof Person) {
/* 判斷obj的型別是否為person型別
* 如果是,
* 則將obj強制轉換為person型別
* 轉換後才能用getName()和getIdCard() (父類object中沒有這2個方法)*/
Person p = (Person)obj;
if((this.getName().equals(p.getName())) && (this.getIdCard().equals(p.getIdCard()))) {
/* 當2個屬性都相同時,判斷為這兩個物件相同
* this.getName().equals(p.getName()),this.getName()是一個String型別,
* 此時用的是JDK寫好的,對String型別的重寫後的equals()方法,
* (String型別是Object的子類,任何型別都是Object型別的子類,
* Object類中有一個equals方法,比較的是記憶體地址,
* 在String子類中,重寫了父類Object中的equals方法,
* 重寫後比較的是字串的內容
* 將字串轉換為字元陣列,逐一進行比較)
**/
return true;
}
}
return false;
}
}
測試
public class Equal {
public static void main(String[] args) {
Person p1 = new Person("邏輯","412550237");
Person p2 = new Person("邏輯","412550237");
System.out.println("用==比較的結果:");
System.out.println(p1 == p2);
System.out.println("比較的是地址");
System.out.println("=====================");
System.out.println("用重寫後的equals方法進行比較:");
System.out.println(p1.equals(p2));
}
}
結果: