1

我有以下代码:

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带有参数的方法,并且因为是then的一个实例我们将进入我们的实现而不是's。Stringb1MainMainequalsObject

但是,在调试时,我看到我Main使用 type 参数输入了实现Object

我看到了那 2 篇文章:
基于参数的真实类型的重载方法选择- 没有解释我的情况,而是类型为sObject 的情况。

https://stackoverflow.com/a/8356435/4345843 - 据我所知,这个答案如果属实,支持我的理论。

很高兴得到解释。

4

2 回答 2

2

这是因为您将Main实例分配给Object变量。Object不包含equals(String)方法,因此选择了唯一适合 - equals(Object)- 的方法。

于 2016-07-16T10:37:19.057 回答
0

将此代码添加到equals(Object other)方法的开头

if(other instanceof String)
return equals((String)other);

除此之外,我不确定 equals 方法如何有用,因为您正在这样做 return other == new Object();。你可能应该做的是更接近this.equals(other);

于 2016-07-16T10:41:06.697 回答