我创建了一个名为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.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |