首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java equals() 中 this 指向調用者:多態下的動態綁定演示

     編輯:程式設計綜合問答

p.equals(q) 調用時,equals 方法內的 this 指向 p,參數 obj 指向 q。強轉後 st 也指向 q,比較的是 p 與 q 的字段值。

代碼執行流

main:
Student p = new Student(); p.name="xyz"; p.age=13;
Student q = new Student(); q.name="xyz"; q.age=13;
p.equals(q);  // 調用點

equals 內部:
public boolean equals(Object obj) {
    // this → p, obj → q
    Student st = (Student) obj; // st → q
    return this.name == st.name && this.age == st.age; // 比較 p 與 q 的字段
}

關鍵點

  • this 永遠指向調用對象:誰調用 equals,this 就是誰。
  • 參數類型 Object:支援多態,傳入任何對象,內部 instanceof 守衛 + 強轉。
  • 字符串比較陷阱:代碼用 == 比較 String,僅比較引用地址。**正確應用 Objects.equals(name, st.name) 或 name.equals(st.name)**。

規範 equals() 實現模板

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student that = (Student) o;
    return age == that.age && Objects.equals(name, that.name);
}

@Override
public int hashCode() {
    return Objects.hash(name, age);
}
「誰調用 equals 方法 this 就是指的誰。」—— 多態動態綁定的核心體現。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved