IDE:Eclipse;语言:Java核心

package p1;

public class StringTestA {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Object o1 = new StringTestA();
        Object o2 = new StringTestA();

        StringTestA o3 = new StringTestA();
        StringTestA o4 = new StringTestA();

        if (o1.equals(o2)) {
            System.out.println("Object o1 and o2 are eqals");

        }

        if (o3.equals(o4)) {
            System.out.println("Object o3 and o4 are eqals");
        }

    }

    public boolean equals(StringTestA other) {
        System.out.println("StringTestA equals mathod reached");
        return true;
    }

}


输出:

  StringTestA equals method reached
  Object o3 and o4 are equals


如果不覆盖等于则无输出。

问题:为什么System.out.println("Object o1 and o2 are eqals");行没有被打印成等号,返回真;

最佳答案

您没有覆盖equals(Object)。参数必须是Object,而不是StringTestA。相反,您正在重载equals(创建具有相同名称的其他方法)。

始终用@Override注释要覆盖的方法。如果您像在此所做的那样在方法声明中犯了一个错误,这样做将导致编译错误。

@Override
public boolean equals(Object obj) {
    //...
}

07-24 09:54