假设我有两个对象,A
和B
其中..
Object A=new Object();
Object B=A;
默认情况下,这些对象每个都有两个整数:int X
和int Y
。首先,在A
和B
中,
(X == 0) && (Y == 0)
所以,你会说这两者是平等的,就像Java一样。现在,假设我们更改A.X
以便A.X=2
。现在,A
和B
不再相同,因为
A.X==2
..但..
B.X==0
(A.equals(B)) == true
(B.equals(A)) == true
那么,你怎么解决这个问题?
答案 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
(如果那时它会有那些变量x
和y
)那么它真的是一个糟糕的班级名称选择。
您的班级必须覆盖.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;
}