ホームページ > Java > &#&チュートリアル > Java の「equals()」メソッドを誤ってオーバーライドすると予期しない動作が起こるのはなぜですか?

Java の「equals()」メソッドを誤ってオーバーライドすると予期しない動作が起こるのはなぜですか?

Linda Hamilton
リリース: 2024-12-16 19:01:15
オリジナル
702 人が閲覧しました

Why Does Incorrectly Overriding Java's `equals()` Method Lead to Unexpected Behavior?

Java のquals() メソッドのオーバーライド: オブジェクト要件を理解する

Java では、equals() メソッドはオブジェクト要件を決定する上で重要な役割を果たします。対象の平等。説明したように、equals() メソッドは Book 型のオブジェクトを比較するためにオーバーライドされました。ただし、Book オブジェクトが ID のみで初期化されたときに問題が発生し、予期しない動作が発生しました。

この矛盾を理解するには、Java がquals() メソッドを次のように定義していることに注意することが重要です。

public boolean equals(Object other);
ログイン後にコピー

これは、オーバーライドされたメソッドのパラメータが Object 型である必要があることを意味します。提供されたコード:

public boolean equals(Book b) {
    ... // More code here
}
ログイン後にコピー

equals() メソッドは、Object ではなく Book 型のパラメーターを持っていたため、オーバーライドではなくオーバーロードされました。オーバーライドされたequals()メソッドを使用して等価比較を実行するArrayListが代わりにオーバーロードされたメソッドを使用していたため、この違いにより予期せぬ動作が発生しました。

equals()を正しくオーバーライドするには、次のObjectパラメータ型を使用する必要があります。

@Override
public boolean equals(Object o) {
    Book b = (Book) o;
    ... // The rest goes here   
}
ログイン後にコピー

この変更により、equals() メソッドは Object パラメーターを type に変換することで Book オブジェクトを適切に比較します。 Book.

要約すると、メソッドをオーバーライドするときは、スーパークラスまたはインターフェイスのメソッド シグネチャで指定されたパラメーターの型に従うことが重要です。そうしないと、予期しない動作やエラーが発生する可能性があり、コードを徹底的にテストしてデバッグすることの重要性が強調されます。

以上がJava の「equals()」メソッドを誤ってオーバーライドすると予期しない動作が起こるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート