Java equals方法不能按预期工作

时间:2018-06-13 01:43:19

标签: java list arraylist equals

件实例是一个包含类Piece的List。 Piece对象包含两个类似于坐标int x和int y的实例变量。但是,当我尝试这些方法时,如果参数块已经在pieces对象中,则第二种方法不会返回true。我在类Piece上生成了一个相同的方法。不知道为什么第二种方法不起作用。

 public boolean alreadyContainsCoordinate1(Piece piece) {
        for (int i = 0; i < getLength(); i++) {
            if (pieces.get(i).getX() == piece.getX() && pieces.get(i).getY() == piece.getY()) {
                return true;
            }
        }

        return false;
    }

    public boolean alreadyContainsThisCoordinate2(Piece piece) {
         for (Piece body : pieces) {
            if (body.equals(piece)) {
                return true;
            }
        }
        return false; 
    }

1 个答案:

答案 0 :(得分:1)

您的第二个alreadyContainsThisCoordinate2()方法可能使用对象的默认equals()方法,该方法比较引用,而不是特定对象的内容。您可以尝试覆盖equals,如下所示:

@Override
public boolean equals(Object o) {
    if (!(o instanceof Piece)) {
        return false;
    }

    Piece p = (Piece)o;
    return this.getX() == p.getX() && this.getY() == p.getY();
}