次のような 2 つの点を比較できないことに気付きました。
if (pointOne == pointTwo) { }
私はいつもこのようにしなければなりません:
if (pointOne.x == pointTwo.x && pointOne.y == pointTwo.y) { }
なぜ最初の例を使用できないのか、本当に疑問に思っています。誰か答えがありますか?
次のような 2 つの点を比較できないことに気付きました。
if (pointOne == pointTwo) { }
私はいつもこのようにしなければなりません:
if (pointOne.x == pointTwo.x && pointOne.y == pointTwo.y) { }
なぜ最初の例を使用できないのか、本当に疑問に思っています。誰か答えがありますか?
equals
class のメソッドを使用する必要がありますPoint
。これを確認してください。
== を使用すると、実際に行っていることは、2 つのPoint
オブジェクトのメモリ アドレスが同じかどうかを確認することです。
Java では、すべてのクラスが から派生しており、同じ派生クラスの 2 つのオブジェクトが同じかどうかを確認する便利な方法を提供するメソッドObject
をオーバーライドできます。equals
Object
==
演算子は、同じオブジェクトを指すかどうかの両方の参照をチェックします。
equals
オブジェクトのメソッドを使用する必要がありPoint
ます-
pointOne.equals(pointTwo);
2 つの点が等しいかどうかを判断します。Point2D の 2 つのインスタンスは、座標空間での位置を表す x メンバー フィールドと y メンバー フィールドの値が同じである場合に等しくなります。
Point は参照であるため、equals を使用する必要がある場合は、equal メソッドをオーバーライドする必要があります。Java は、「==」などのオーバーライド演算子をサポートしていません。
私は仮定pointOne
しpointTwo
、いくつかのクラスのオブジェクトですか?Java では演算子をオーバーロードできないため、フィールドを比較する必要があります。このような場合、クラスの equals メソッドをオーバーライドして、次のように使用することをお勧めします。
PointOne.equals(PointTwo)
さて、これはオブジェクトの比較になります。== を使用して比較すると、メモリ位置を比較することになります。
Equals をオーバーライドして呼び出すことができます。