equals 里的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/02 03:49:58
class Worker{
Worker teacher;

public boolean equals(Object o){
if(this==o) return true;
if(this==null)return false;
if(this.getClass()==o.getClass()){
Worker b=(Worker)o;
if(b.teacher==this.teacher){
return true;
}
}
return false;
}
}

这段代码里的b.teacher==this.teacher这个不明白。
b.teacher和this.teacher不是代表地址吗,这两个怎么能相同
谢谢,那如果我想要equals中判断b.teacher和this.teacher相等,该如何写那

最好不要那样写,我给你解释下:
比如你有两个对象: Worker t1,t2..(而t1,t2中又分别有个Worker对象teacher)
现在你想要判断t1和t2是否相等,你想要调用equals方法;

那么在equals方法中要判断两个teacher是否相等!
结果知道了吧? 在你判断 teacher是否相等的时候, 你将面临一个同样的问题:要判断两个teacher的成员teacher是否相等!

这样就无止境啦,所以不建议!如果非要写,那我只有这么做:
class Worker{

public Worker teacher;

public boolean equals(Object o){
System.out.println("Checking ....!");
if(this==o) return true;
if(this==null)return false;
if(this.getClass()==o.getClass()){
Worker b=(Worker)o;
//下面是我修改的代码
if(b.teacher!=null &&this.teacher!=null){
return b.teacher.equals(this.teacher);
}
else
return b.teacher == this.teacher;
}
return false;
}

你在 Worker类里面覆盖了 public boolean equals(Object o) 方法,
而且 teacher也是Worker类型的!

所以在Worker类的 equals方法里面是不能 再调用equals的,不然会产生自调用,无限循环的!

b.teacher==this.teacher的意思的确 如你所说,是比地址!
但是为什么 会相同呢?

呵呵,