即使在定义 equals 之后,Java Contains 方法也会返回 false

标签 java

我有一个坐标类和一个坐标列表。我已经重写了坐标类的 equals 方法,但是当我在坐标列表中使用 contains 时,列表中的坐标为 false。 有没有人知道我哪里出错了? x 和 y 值是整数。

public boolean equals(Coordinate c){
        return (this.x == c.getxCoordinate() && this.y == c.getyCoordinate());
    }

名单如下:

List safe_locs = new ArrayList<Coordinate>();

测试如下:

System.out.println(c);
System.out.println(safe_locs.contains(c));
System.out.println(safe_locs);

输出是:

Coordinate[x: 0, y: 0]
false
[Coordinate[x: 0, y: 0], Coordinate[x: 1, y: 0], Coordinate[x: 0, y: 1], Coordinate[x: 3, y: 0], Coordinate[x: 0, y: 3]]

最佳答案

您的equals() 方法重载 equals(Object) ,虽然它应该覆盖它:

@Override
public boolean equals(Object o){
    if(!(o instanceof Coordinate)) {
        return false;
    }
    Coordinate c = (Coordinate)o;
    return (this.x == c.getxCoordinate() && this.y == c.getyCoordinate());
    }

不幸的是你必须使用向下转换。注意 @Override annotation - 将来使用它来避免此类问题。

关于即使在定义 equals 之后,Java Contains 方法也会返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768952/

相关文章:

java - Jboss - java.net.SocketException : Too many open files

java - 返回过滤元素的新实例

java - 数组深拷贝和浅拷贝

java - 没有实际使用任何条件语句的条件?

java - 在类的构造函数中初始化泛型类型的数组,而无需传递 Class<T> 参数

java - 使用 php、javascript 等创建电子邮件投递箱

java - 如何用Java实现异步应用程序

java - 接口(interface)应该放在单独的包中吗?

java - 未找到使用 img 标签在 servlet 中显示的图像

java - onDestroy() 方法上出现 NullPointerException