This question already has answers here:
Why does my ArrayList contain N copies of the last item added to the list?
                                
                                    (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