equals问题

wl3072102 2008-03-06 05:52:01
public boolean equals(object obj){
Name name=null;
if(obj instancesof Name){
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){
return true;
}else return false;
}
return super.equals(obj)
}
在这个方法中为什么最后要写上super.equals(obj),难道写返回false不行吗,有点不理解!
为什么还要让交到Object去比较?
...全文
222 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mukada 2008-03-09
  • 打赏
  • 举报
回复
这就是不要在equals()方法中使用instanceof进行检验的原因```
java语法规范要求equals方法具有5大特性:
(1)自反性:x.equals(x)为true;
(2)对称性:x.equals(y)为true,那么y.equals(x)也要为true
(3)传递性:x.equals(y)为true,y.equals(x)为true那么x.equals(z)也要为true;
(4)一致性:如果x和y引用没变,不管合时调用x.equals(y)结果相同;
(5)x非空x.equlas(null)为false;
你上面的代码如果不用super.equlas(obj)就违反了对称性规范```
就是说儿子==老子,那老子就必须==儿子```
fosjos 2008-03-09
  • 打赏
  • 举报
回复
很明显,中间的代码已经承认了:老子.equals(儿子)
sky_ccy 2008-03-07
  • 打赏
  • 举报
回复
后调用super.equals()的意思是,当obj是Name的父类的实例时,调用父类的equals方法来判断是否相等。不能直接返回false,有可能是true的。

很对哦,呵呵,,
wl3072102 2008-03-07
  • 打赏
  • 举报
回复
难道传进来的是obj=老子;通过判断返回true了,就认为老子=儿子了?这逻辑上也不成立啊!!!
zsu_zhq 2008-03-06
  • 打赏
  • 举报
回复
最后调用super.equals()的意思是,当obj是Name的父类的实例时,调用父类的equals方法来判断是否相等。不能直接返回false,有可能是true的。
树成 2008-03-06
  • 打赏
  • 举报
回复
如果它调用super.equals(),可能它的父类也有覆盖object的equals的方法需要执行。
bt_lose 2008-03-06
  • 打赏
  • 举报
回复
谁说不行,可以的.我认为可以的.
fosjos 2008-03-06
  • 打赏
  • 举报
回复
应该不是单纯的“交到Object去比较”

该方法允许Name和Name派生类比较
所以也加入了最后一句,同Name基类比较
否则equals单向执行
就会出现a.equals(b)!=b.equals(a)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧