gpt4 book ai didi

java - 关于带有 Object 参数的 boolean 方法的深层平等问题

转载 作者:行者123 更新时间:2023-11-29 05:09:19 25 4
gpt4 key购买 nike

我正在编写一个名为 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.
}

我想问题可能出在我的boolean equals 方法上,但我已经尝试了很多我仍然无法通过测试。这里有一个深刻的平等问题吗?有人可以帮助我吗?

最佳答案

Is there a deep equal issue here?

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

//Given another object, is it also a Coord with the same row and column values?

这就是您需要实现的:

@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;
}

关于java - 关于带有 Object 参数的 boolean 方法的深层平等问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com