ホームページ >Java >&#&チュートリアル >Java 整数の比較: == と equals() のどちらを使用する必要があるか?
Java における整数の等価性: == と等しいの難題を解明する
Java のバージョン 1.5 でのオートボクシングの導入により、プリミティブの便利な交換が可能になりましたint などの型と、Integer などの対応するラッパー クラスです。しかし、最近の観察により、整数値の比較に == を使用することの妥当性について疑問が生じています。
次のコードを考えてみましょう:
Integer cdiCt = ...; Integer cdsCt = ...; ... if (cdiCt != null & cdiCt != cdsCt) mismatch = true;
驚くべきことに、このコードは不一致を次のように設定することがあります。 cdiCt と cdsCt の値が等しい場合でも true。 Eclipse でブレークポイントを使用すると、両方の整数値が 137 に等しいことが判明しましたが、条件式は false と評価されました。
条件を変更して代わりにquals() を使用すると、
if (cdiCt != null & cdiCt != null & !cdiCt.equals(cdsCt))
問題が解決されました。問題。ここで疑問が生じます: 2 つの整数値を比較するのに == を使用するのはやはり賢明ではありませんか?
答えは Java 仮想マシン (JVM) の整数値のキャッシュにあります。パフォーマンスを向上させるために、JVM は -128 から 127 までの整数値をキャッシュします。これは、== を使用してこの範囲内の 2 つの整数値を比較する場合、それらが同じキャッシュされたインスタンスを参照している場合にのみ等しくなることを意味します。
ただし、値がこの範囲外である場合、またはオートボックス化されていない場合は、別個のオブジェクトとして扱われます。提供されている例で示されているように、これにより予期しない動作が発生する可能性があります。
したがって、特にキャッシュされた範囲を超える可能性がある場合や精度が重要な場合は、整数値の比較に == に依存することは一般的に推奨されません。 。代わりに、equals() を使用する方が、信頼性の高い等価比較を保証するより安全なアプローチです。
以上がJava 整数の比較: == と equals() のどちらを使用する必要があるか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。