java - Java equals 方法无法按预期工作
问题描述
pieces 实例是一个包含类 Piece 的列表。Piece 对象包含两个实例变量,类似于坐标 int x 和 int y。但是,当我尝试这些方法时,如果参数piece 已经在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;
}
解决方案
您的第二种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();
}
推荐阅读
- sql-server - SQL Server - 在多行的 sql server 列中返回 json 数组项的计数
- javascript - 带有节点的茉莉花在不相关(即与节点无关)的 package.json 文件上拾取并失败
- cordova - 离子构建失败:失败:构建完成,失败 2 次
- python - 如何将东西放入 __init__(self):通过在变量中提供参数?
- javascript - 为什么clickHandler中的this关键字未定义?
- angular - 如何在 Angular 路由上集成淡入淡出效果
- precision - 如何正确使用 Kaitai-Struct 解码这些数据?
- javascript - 无需单击下一步按钮即可切换 HTML 表单
- javascript - JS Pig诗匹配子字符串与正则表达式
- java - 如何在LinearLayout中的TextView下方显示ImageView