1

次のような 2 つの点を比較できないことに気付きました。

if (pointOne == pointTwo) { }

私はいつもこのようにしなければなりません:

if (pointOne.x == pointTwo.x && pointOne.y == pointTwo.y) { }

なぜ最初の例を使用できないのか、本当に疑問に思っています。誰か答えがありますか?

4

6 に答える 6

10

equalsclass のメソッドを使用する必要がありますPointこれを確認してください。

== を使用すると、実際に行っていることは、2 つのPointオブジェクトのメモリ アドレスが同じかどうかを確認することです。

Java では、すべてのクラスが から派生しており、同じ派生クラスの 2 つのオブジェクトが同じかどうかを確認する便利な方法を提供するメソッドObjectをオーバーライドできます。equalsObject

于 2013-10-31T15:24:25.833 に答える
4

==演算子は、同じオブジェクトを指すかどうかの両方の参照をチェックします。

equalsオブジェクトのメソッドを使用する必要がありPointます-

pointOne.equals(pointTwo);

2 つの点が等しいかどうかを判断します。Point2D の 2 つのインスタンスは、座標空間での位置を表す x メンバー フィールドと y メンバー フィールドの値が同じである場合に等しくなります。

ドキュメンテーション

于 2013-10-31T15:24:57.850 に答える
1

Point は参照であるため、equals を使用する必要がある場合は、equal メソッドをオーバーライドする必要があります。Java は、「==」などのオーバーライド演算子をサポートしていません。

于 2013-10-31T15:26:33.563 に答える
0

私は仮定pointOnepointTwo、いくつかのクラスのオブジェクトですか?Java では演算子をオーバーロードできないため、フィールドを比較する必要があります。このような場合、クラスの equals メソッドをオーバーライドして、次のように使用することをお勧めします。

PointOne.equals(PointTwo)
于 2013-10-31T15:27:25.877 に答える
0

さて、これはオブジェクトの比較になります。== を使用して比較すると、メモリ位置を比較することになります。

Equals をオーバーライドして呼び出すことができます。

于 2013-10-31T15:23:42.893 に答える