为什么在我的 java 代码中等于 returns false?

Why equals returns false in my java code?

我不明白为什么我的代码中 equals() returns 是“false”而不是“true”?

class Location {

    private int x, y;

    public Location(int x, int y) {

        this.x = x;
        this.y = y;
    }
}

public class App {

    public static void main(String[] args) {

        Location a = new Location(1, 2); //
        Location b = new Location(1, 2); // same values

        System.out.println(a.equals(b)); // result : "false"
    }
}

如何比较两个对象的值?

用这个覆盖基础 'equals' 方法:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Location that = (Location) o;
    return x.equals(that.x) &&
      y.equals(that.y);
}

此方法在对象 class 中定义,因此每个 Java 对象都继承它。默认情况下,它的实现比较对象内存地址,因此它的工作方式与 == 运算符相同。但是,我们可以覆盖此方法以定义相等对我们的对象意味着什么。

您应该为此 class 重写重写 equals() 方法,以便我们可以根据两个位置的内部详细信息比较两个位置:

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Location that = (Location) o;
        return x.equals(that.x) &&
          y.equals(that.y);
    }

覆盖equals()方法就像例行公事。您可以使用 IDE 工具生成 equals()hashcode() 方法。

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Location other = (Location) obj;
        if (!getEnclosingInstance().equals(other.getEnclosingInstance()))
            return false;
        if (x != other.x)
            return false;
        if (y != other.y)
            return false;
        return true;
    }