ホームページ >Java >&#&チュートリアル >Java 整数の比較: `==` が機能するのはどのような場合、そして `equals()` を使用する必要があるのはどのような場合ですか?

Java 整数の比較: `==` が機能するのはどのような場合、そして `equals()` を使用する必要があるのはどのような場合ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-25 22:49:16902ブラウズ

Java Integer Comparison: When Does `==` Work, and When Should You Use `equals()`?

整数参照の等価性と値の等価性

Java では、int のようなプリミティブと Integer のようなオブジェクト ラッパーは互換性がありません。この質問は、等しい int 値を持つ Integer オブジェクトが == を使用して誤って比較され、予期しない真の結果が生じるという問題を提起しています。

答えは、JVM による Integer 値のキャッシュにあります。パフォーマンス上の理由から、JVM は特定の範囲 (-128 ~ 127) 内で事前に割り当てられたオブジェクトを再利用します。 == を使用して Integer オブジェクトを比較する場合、JVM は値の同一性ではなく、参照の同一性をチェックします。このキャッシュされた範囲内の値の場合、参照の等価性は値の等価性を意味します。

ただし、提供されたコード例では、整数値はこのキャッシュされた範囲外にあるため、参照の等価性は値の等価性を保証しません。代わりに、equals() を使用して整数値が等しいかどうかを比較する必要があります。

質問の回答で参照されている stackoverflow リンクは、オートボックス化の複雑さと、コンパイラーが常に「正常に機能する」ことができない理由についてのさらなる洞察を提供します。

要約すると、プリミティブに == を使用すると便利ですが、オブジェクトを扱う場合には参照の等価性の制限を理解することが重要ですInteger のようなラッパー。値の等価比較の場合は、代わりにequals()を使用する必要があります。

以上がJava 整数の比較: `==` が機能するのはどのような場合、そして `equals()` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。