This question already has answers here:
Why does my ArrayList contain N copies of the last item added to the list?
(4个答案)
去年关闭。
我正在尝试在Java中实现equals方法的扩展。问题是,由于一种原因或另一种原因,它给出了错误的响应。
因此,即使它显然应该是错误的,它也还是成立的。我不确定在这里尝试什么,代码的第一部分尝试匹配内存地址,该地址应该为false。另一个if语句尝试查看它是否属于我们类的一部分,如果存在,它将尝试查看这些坐标是否相等,并应返回false。
除此之外,我还有一个小问题:在将Cordes投射到“ somethingelse”上时,这实际上是什么意思,其他对象是否已不是对象,我们为什么要强制转换它,以及为什么要执行此操作使我们能够进入“ theother.x / theother.y”。
提前致谢!
这意味着它们由Cordes的所有实例共享。当您构造第二个时,它会更改两个值。如果从这两行中删除
(4个答案)
去年关闭。
我正在尝试在Java中实现equals方法的扩展。问题是,由于一种原因或另一种原因,它给出了错误的响应。
public class Cordes{
private static double x;
private static double y;
public Cordes(double x, double y) {
this.x = x;
this.y = y;
}
public boolean equals(Object somethingelse) {
if (this == somethingelse) {
return true;
}
if (somethingelse instanceof Cordes) {
Cordes theother = (Cordes) somethingelse;
return (this.x == theother.x) && (this.y == theother.y);
}
return false;
}
public static void main(String[] args) {
Cordes p = new Cordes(2.0, 4.0);
Cordes p2 = new Cordes(3.0, 4.0);
System.out.println(p.equals(p2));
}
因此,即使它显然应该是错误的,它也还是成立的。我不确定在这里尝试什么,代码的第一部分尝试匹配内存地址,该地址应该为false。另一个if语句尝试查看它是否属于我们类的一部分,如果存在,它将尝试查看这些坐标是否相等,并应返回false。
除此之外,我还有一个小问题:在将Cordes投射到“ somethingelse”上时,这实际上是什么意思,其他对象是否已不是对象,我们为什么要强制转换它,以及为什么要执行此操作使我们能够进入“ theother.x / theother.y”。
提前致谢!
最佳答案
您将成员变量声明为静态的:
private static double x;
private static double y;
这意味着它们由Cordes的所有实例共享。当您构造第二个时,它会更改两个值。如果从这两行中删除
static
,应该没问题。09-10 03:08