麻烦等于equals方法

Use*_*854 2 java collections

我创建了一个名为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; 
}
Run Code Online (Sandbox Code Playgroud)

}

但是当我将equals函数替换为低于它的函数给出正确的结果时..为什么会这样?从技术上讲没有区别对吗?你能帮我看看JVM如何查看代码.

    public boolean equals(Object cond){
    if(cond instanceof Student){
        Student test = (Student) cond;
        return test.sid==this.sid;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 10

equals(Student)一种方法不会覆盖该Object#equals(Object)方法.因此,该list.contains(Student)方法将调用默认Object#equals()方法,并使用它来比较引用==.因此,对于两个不同的对象,它将返回false.