我有以下代码:
public class Main {
public boolean equals(String other){
return other == new Object();
}
public boolean equals(Object other){
return other == new Object();
}
public static void main(String[] args){
String s = "";
Object b1 = new Main();
System.out.println(b1.equals(s));
}
}
据我所知,equals
方法选择应该以这种方式工作:
在编译期间,将选择签名,并且由于s
是编译时类型(例如type
),因此应选择带参数String
的方法,并且从{{1}开始}是b1
的一个实例,然后我们将输入Main
Main
的实现,而不是equals
。
但是,在调试时,我看到我使用Object
类型的参数输入Main
实现。
我看到了那两篇文章:
Overloaded method selection based on the parameter's real type - 不解释我的情况,而是Object
类型为Object的情况。
https://stackoverflow.com/a/8356435/4345843 - 这个答案,如果是真的,据我所知,支持我的理论。
很乐意解释。
答案 0 :(得分:2)
这是因为您将Main
实例分配给Object
变量。 Object
不包含equals(String)
方法,因此选择了唯一适合的方法 - equals(Object)
。
答案 1 :(得分:0)
将此代码添加到equals(Object other)
方法的开头
if(other instanceof String)
return equals((String)other);
除此之外,我不确定equals方法是如何有用的,因为你正在执行此操作return other == new Object();
。您应该做的事情更接近this.equals(other);