0

A2つのオブジェクトがあり、どこにあるとしましょうB

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

これらのオブジェクトには、デフォルトでそれぞれ2つのintがあります:int Xint Y。まず、との両方AB

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

したがって、Javaと同様に、これら2つは等しいと言えます。A.Xさて、次のように変更するとしましょうA.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;

ここにはオブジェクトが1つだけあります。オブジェクトAに変更を加えると、まったく同じオブジェクトであるため、同じ変更がオブジェクトBに表示されます。

于 2012-11-15T01:57:00.827 に答える
0

変数を含むクラスの.equalsメソッドをオーバーライドする必要があります。この質問を見てください:Javaでequalsメソッドをオーバーライドする方法

于 2012-11-15T01:46:24.533 に答える
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;
}
于 2012-11-15T01:50:36.573 に答える