2 dsq1040 dsq1040 于 2013.10.22 21:42 提问

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

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个回答

fanfan_gg
fanfan_gg   2013.10.23 22:55
已采纳

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

fanfan_gg
fanfan_gg 明白了就标记答案吧
4 年多之前 回复
dsq1040
dsq1040 明白了,谢谢
4 年多之前 回复
lu2210
lu2210   2013.10.23 08:44

class Test{
private String value;
public Test(String v){
value = v;
}
外面取不到值的

dsq1040
dsq1040 谢谢,不过我还是不明白。我想问的是test明明是Test的对象。调用test1.equals(obj)的时候为什么没有调用Test的equals方法
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!