为了账号安全,请及时绑定邮箱和手机立即绑定

请教高手,以下代码为何输出false

请教高手,以下代码为何输出false

至尊宝的传说 2019-02-27 14:10:40
public class Test7 {public static void main(String[]args){Test test1 = new Test("aa");Object obj = new Test("aa");System.out.println(test1.equals(obj));}}class Test{private String value;public Test(String v){value = v;}public boolean equals(Test o){if(o == this){return true;}if(o instanceof Test){Test test = (Test)o;return value.equals(test.value);}return false;}}为何test.equals(obj)调用的是Object的equals方法,谢谢
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

原因在于你类Test定义的equals方法参数是Test类型的 而Test继承自Object Object本身就有一个equals方法,他的参数是Object类型的
也就是说你的Test实际上有两个equals方法,一个是参数为Test类型的 一个是为Object类型的.
在你的例子中obj虽然实际类型是Test 但是声明类型为Object 所以在调用test.equels方法时 实际上是匹配的Object上的那个equals方法而不是Test的. 明白了么 骚年

查看完整回答
反对 回复 2019-04-30
  • 2 回答
  • 0 关注
  • 596 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号