Java 带对象参数的布尔方法的深度相等问题

Java 带对象参数的布尔方法的深度相等问题,java,Java,我正在写一个叫做Coord的课程。我创建了一个构造函数: public final int r,c; public Coord (int r, int c){ this.r = r; this.c = c; } 我还做了另外两种方法 //Creates and returns a new Coord value with the same row/column public Coord copy(){ Coord copy = new Coord (r,c); return

我正在写一个叫做Coord的课程。我创建了一个构造函数:

public final int r,c;  
public Coord (int r, int c){
this.r = r;
this.c = c;
}
我还做了另外两种方法

//Creates and returns a new Coord value with the same row/column 
public Coord copy(){   
  Coord copy = new Coord (r,c);
  return copy;
}


//Given another object, is it also a Coord with the same row and column values?
public boolean equals(Object o){
  return this==o;  //this may be incorrect.
}
现在我无法通过以下一些测试用例:

Coord c = new Coord (5,10);
@Test (timeout=2000) public void coord() {
assertEquals(c, c.copy());
assertEquals(c, c);
assertFalse(c.equals(new Coord (2,3))); // @(5,10) != @(2,3).
assertFalse(c.equals("hello")); // must work for non-Coords.
}
我认为这个问题可能来自我的布尔等于方法,但我已经尝试了很多,仍然无法通过测试。这里有一个深刻的平等问题吗?有人能帮我吗

这里有一个深刻的平等问题吗

是的,您的
equals
方法只是检查传递给它的值是否是相同的引用。您的评论说明了您想做什么:

这就是您需要实现的:

@Override public boolean equals(Object o) {
    if (o == null) {
        return false;
    }
    if (o.getClass() != getClass()) {
        return false;
    }
    Coord other = (Coord) o;
    return other.r == r && other.c == c;
}
我还鼓励您将类设置为final(在这种情况下,您可以使用
instanceof
而不是调用
getClass()
),并且您还需要实现
hashCode()
以与
equals
保持一致。例如:

@Override public int hashCode() {
    int hash = 23;
    hash = hash * 31 + r;
    hash = hash * 31 + c;
    return hash;
}

哪些测试用例失败了?不过,您对
equals
的实现肯定是错误的。查看如何重写
equal
,除了这个答案之外,我还要补充一点,copy方法似乎没有多大意义,因为类是不可变的。
@Override public int hashCode() {
    int hash = 23;
    hash = hash * 31 + r;
    hash = hash * 31 + c;
    return hash;
}