java - 测试相等性的充分方法

标签 java

我想为我拥有的类 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,第一个测试只会加快速度,第二个测试有两个功能:

  1. 如果 ynull,则返回 false - 这会稍微减少代码量
  2. 它会检查 y 是否属于正确的类别。

编辑

我不确定你的评论中的“复制”是什么意思,我假设你的意思是“引用”。如果您在将这些数组传递给 equals 之前复制这些数组,我建议您不要这样做,因为如果该对象找到进入 的方式,则可以调用此方法很多很多(很多)次 map 设置

关于java - 测试相等性的充分方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230101/

相关文章:

Java ResultSet getString 怪异?

Java 安全性 - MSCAPI 提供程序 : How to use without password popup?

java - 使用 SMPP (CloudHopper) 检索其帐户的剩余积分

java - for 循环的 while 部分在 java 中是每次执行一次还是只执行一次?

java - 在 Scala 中将 Int32 表示为 4 个字节

Java Socket 卡住问题

java - java_home 和 popen 之间的 java 版本不同

java - 是 ! JAVA中的原子操作

java - 重量排序(克、毫克、升、毫升。)

java - Cloud Tasks 在\"specified\"区域不可用