ホームページ > Java > &#&チュートリアル > Java で「==」が「Integer」オブジェクトを正しく比較できないことがあるのはなぜですか?

Java で「==」が「Integer」オブジェクトを正しく比較できないことがあるのはなぜですか?

Barbara Streisand
リリース: 2025-01-02 20:13:39
オリジナル
470 人が閲覧しました

Why Does `==` Sometimes Fail to Compare `Integer` Objects Correctly in Java?

Java における整数の等価性の謎

Java がバージョン 1.5 でオートボックス化を導入したため、Integer オブジェクトの使用はプリミティブ int と置き換え可能になりました。ただし、Integer オブジェクトの比較に == を使用すると、予期しない結果が生じる可能性があることが観察されています。

複雑な状況で、Integer 変数の比較に == を使用するコードが誤ってブール フラグを true に設定していることが判明しました。値が実際に等しいとき。ただし、比較を !cdiCt.equals(cdsCt) に切り替えることで問題は解決しました。

この異常な動作は、JVM の整数値のキャッシュ メカニズムに起因します。 -128 から 127 の範囲内の値の場合、JVM はキャッシュされたインスタンスを再利用し、メモリの効率的な使用を確保します。したがって、この範囲の整数は、実際の参照に関係なく同一であるように見えます。

== を使用して Integer オブジェクトを比較する場合、内容ではなく参照の同等性がチェックされます。したがって、キャッシュされたインスタンスが使用されている場合、オブジェクト参照が異なる場合でも比較は true を返します。

equals() メソッドを使用する場合、この問題は発生しません。これは、equals() メソッドがオブジェクトの値を比較するためです。参考文献。そのため、特に値の範囲がキャッシュされた範囲を超える可能性がある場合、または正確な同等性の判定が必要な場合には、Integer オブジェクトの比較には、equals() を使用することをお勧めします。

以上がJava で「==」が「Integer」オブジェクトを正しく比較できないことがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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