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

Java Object 類型參數與 equals 方法重寫:this 關鍵字指向呼叫物件

     編輯:程式設計綜合問答

程式碼情境

class Student {
    String name; int age;
    public boolean equals(Object obj) {
        Student st = null;
        if (obj instanceof Student) st = (Student)obj;
        else return false;
        if (st.name == this.name && st.age == this.age) return true;
        else return false;
    }
}
Student p = new Student(); p.name="xyz"; p.age=13;
Student q = new Student(); q.name="xyz"; q.age=13;
if (p.equals(q)) ...

關鍵問題解答

1. if (st.name == this.name ...) 意義?

  • this 指向呼叫 equals 的物件(此處為 p)。
  • st 是參數 obj 轉型後的參考(此處為 q)。
  • 該行比較兩物件的 name 參考是否指向同一字串物件(注意:應用 .equals() 比較字串內容)。

2. this.name 代表哪個 name?

代表當前物件(呼叫者)的實例變數name。在 p.equals(q) 中,this = p,故 this.name 即 p.name。

改進建議

  1. 字串比較用 .equals():
    if (st.name != null ? st.name.equals(this.name) : this.name == null
        && st.age == this.age) return true;
  2. 覆寫 hashCode():配合 equals 契約,否則用於 HashMap/HashSet 時失效。
  3. 使用 Objects.equals (Java 7+) 簡化空值處理。

多態視角

equals(Object) 參數型別為 Object,體現多態:接受任何物件,運行期再判斷實際型別。這正是「父類引用指向子類物件」的經典應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved