gpt4 book ai didi

java - equals方法的问题

转载 作者:行者123 更新时间:2023-12-04 17:17:55 24 4
gpt4 key购买 nike

我创建了一个名为 student 的类,它有一个 equals 方法,如下所示。我的问题是这个。

我创建了一个学生类的实例并将其添加到 ArrayList,现在我想检查列表是否包含学生对象的副本。当我用下面的 equals 函数尝试这个时,它给出了错误的结果。

例如。

    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;
}

但是当我用下面的函数替换 equals 函数时,它给出了正确的结果。这是为什么呢?从技术上讲没有区别吧?你能帮我看看 JVM 是如何看待代码的吗..

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

最佳答案

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

关于java - equals方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22346976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com