0

假设我有两个对象,A并且B在哪里..

Object A=new Object();
Object B=A;

默认情况下,这些对象每个都有两个整数:int Xint Y. 首先,在AB中,

(X == 0) && (Y == 0)

所以,你会说这两者是平等的,就像 Java 一样。现在,假设我们改变A.XA.X=2. 现在,A并且B不再相等,因为

A.X==2

..但..

B.X==0

然而,Java 仍然说它们是平等的。

(A.equals(B)) == true
(B.equals(A)) == true

那么,你如何解决这个问题?

4

4 回答 4

3

通过这样做Object B=A;,您不会创建一个新对象,而B只是指向A。所以它只有一个对象。

因此,当您更改时A.X = 2B.X在其引用相同变量时也是 2,因此相等。

您可以通过打印B.X值来验证这一点。

于 2012-11-15T01:54:39.163 回答
1

我认为每个人(辛格先生除外)都在这里遗漏了一点:

Object A=new Object(); // Implication is that this is really a user-defined class
Object B=A;

你在这里只有一个对象。如果您对对象 A 进行更改,对象 B 中将出现相同的更改,因为它们是完全相同的对象

于 2012-11-15T01:57:00.827 回答
0

如果Object真的是你自己的类而不是java.lang.Object(如果是,那么它会有这些变量xy),那么这真的是一个糟糕的类名选择。

您的类必须将.equals方法重写为:

@Override
public boolean equals(Object obj) {
    if(this == obj) return true;
    if(!(obj instanceof MyObject)) return false;
    MyObject other = (MyObject) obj;
    return other.x == this.x && other.y == this.y;
}
于 2012-11-15T01:50:36.573 回答
0

您需要覆盖包含变量的类的 .equals 方法。看看这个问题:How to override equals method in java

于 2012-11-15T01:46:24.533 回答