我創建了一個名爲student的類,它具有如下所示的equals方法。 我的問題是這樣的。等於方法的問題
我創建了一個學生類的實例並將其添加到ArrayList,現在我想檢查天氣列表包含學生對象的副本。當我嘗試用下面的等號函數給出錯誤的結果。
例如。
Student stud1= new Student(101,"Student1");
Student stud5= new Student(105,"Student5");
Student stud6= new Student(105,"Student5");
list1.add(stud1);
list1.add(stud5);
System.out.println(list1.contains(new Student(105,"Student5")));// outputting false
class Student{
int sid;
String sname;
public Student(int sid,String sname){
this.sid=sid;
this.sname=sname;
}
public String toString(){
return ""+this.sid;
}
public boolean equals(Student test){
return this.sid==test.sid;
}
}
但是當我用一個低於其給出正確的結果。爲什麼是取代平等的功能?技術上沒有區別嗎?能否請你幫我的JVM是如何看代碼..
public boolean equals(Object cond){
if(cond instanceof Student){
Student test = (Student) cond;
return test.sid==this.sid;
}
return false;
}
我們說每個對象都是一個類的實例,所以從這個意義上講,學生不會成爲一個對象嗎? – User27854
@ user2900314這是事實,但這不是重寫的方式。不改變方法的簽名。你可以在參數中給出協變類型。協變類型可以和返回類型一起工作。 –
明白了,謝謝。 – User27854