在下面的代码中,为什么 o1.equals(o2);
调用 equals(Object o)
而不是 equals(EqualsTest et)
,即使 o1
和 o2
正在引用 EqualsTest
类型的对象!
public class EqualsTest {
public static <T> boolean equalTest(T o1, T o2) {
return o1.equals(o2);
}
public static void main(String[] args) {
EqualsTest et1 = new EqualsTest();
EqualsTest et2 = new EqualsTest();
System.out.println(et1.equals(et2));
System.out.println(equalTest(et1, et2));
}
public boolean equals(Object o) {
if (o instanceof EqualsTest) {
System.out.println("equals(Object)");
return true;
}
return false;
}
public boolean equals(EqualsTest et) {
System.out.println("equals(EqualsTest)");
return this.equals((Object)et);
}
}
最佳答案
编译器根据 declared type of the argument 找到对应的方法,不是最具体的。由于您没有为 T
指定任何内容,因此它默认为 Object
,正如@nicholas.hauschild 正确指出的那样。
关于Java参数混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13237114/