为什么以下对象在Java中不相等?

0 java equals object

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

  StringTestA equals method reached
  Object o3 and o4 are equals
Run Code Online (Sandbox Code Playgroud)

如果未覆盖则等于没有输出.

问题:为什么System.out.println("Object o1 and o2 are eqals");行不打印,因为equals返回true;

Mar*_*ers 8

你不是压倒一切equals(Object).论证必须是Object,而不是StringTestA.而是重载 equals(创建一个具有相同名称的不同方法).

始终注释要覆盖的方法@Override.如果您碰巧在方法声明中出错,这样做会导致编译错误,就像您在此处所做的那样.

@Override
public boolean equals(Object obj) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

  • 如果重写equals(),则必须覆盖hashCode().否则将违反Object.hashCode的常规合同,当您的类与所有基于散列的集合一起使用时,可能会产生意外的后果. (2认同)