我想为我拥有的类 Board
实现自定义 equals()
方法。该方法比较每个板的数组,定义为private int[] board
,如果数组相等则返回 true,否则返回 false。我知道在测试相等性时存在一些“陷阱”,所以我想知道以下代码是否是最佳的并且足以真正测试相等性:
public boolean equals(Object y) {
if (this.getClass() != y.getClass()) return false; //must be same class -- duh
Board that = (Board) y; //y cast as Board
int[] thisBoardCopy = this.getBoard(); //copy of current board
int[] thatBoardCopy = that.getBoard(); //copy of y's board
return Arrays.equals(thisBoardCopy, thatBoardCopy);
}
最佳答案
在java中编写.equals
方法的常用习惯用法是这样的:
public boolean equals(Object y) {
if(y == this) return true;
if(!(y instanceof Board.class)) return false;
final Board that = (Board) y; //y cast as Board
return Arrays.equals(getBoard(), that.getBoard());
}
如果是相同的Board
,第一个测试只会加快速度,第二个测试有两个功能:
- 如果
y
为null
,则返回false
- 这会稍微减少代码量 - 它会检查
y
是否属于正确的类别。
编辑
我不确定你的评论中的“复制”是什么意思,我假设你的意思是“引用”。如果您在将这些数组传递给 equals
之前复制这些数组,我建议您不要这样做,因为如果该对象找到进入 的方式,则可以调用此方法很多很多(很多)次 map
或设置
。
关于java - 测试相等性的充分方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230101/