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)) ...
if (st.name == this.name ...) 意義?this 指向呼叫 equals 的物件(此處為 p)。st 是參數 obj 轉型後的參考(此處為 q)。name 參考是否指向同一字串物件(注意:應用 .equals() 比較字串內容)。this.name 代表哪個 name?代表當前物件(呼叫者)的實例變數name。在 p.equals(q) 中,this = p,故 this.name 即 p.name。
.equals():
if (st.name != null ? st.name.equals(this.name) : this.name == null
&& st.age == this.age) return true;
hashCode():配合 equals 契約,否則用於 HashMap/HashSet 時失效。Objects.equals (Java 7+) 簡化空值處理。equals(Object) 參數型別為 Object,體現多態:接受任何物件,運行期再判斷實際型別。這正是「父類引用指向子類物件」的經典應用。