如何检测两个相同类型的对象中的所有变量是否相同?

时间:2012-11-15 01:44:01

标签: java variables equality

假设我有两个对象,AB其中..

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

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

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

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

A.X==2

..但..

B.X==0

然而,Java仍然表示他们是平等的。

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

那么,你怎么解决这个问题?

4 个答案:

答案 0 :(得分:3)

通过执行此操作Object B=A;,您不是要创建新对象,而B仅指向A。所以它只是一个对象。

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

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

答案 1 :(得分:1)

我认为每个人(辛格先生除外)都错过了一点:

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

这里只有一个对象。如果对对象A进行更改,则对象B中将显示相同的更改,因为它们是完全相同的对象

答案 2 :(得分:0)

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

答案 3 :(得分: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;
}