Java における整数比較の難問: == 対 equals()
Java 1.5 以降では、整数はプリミティブ int として扱うことができます。多くのシナリオでの値。ただし、最近のコードの問題により、整数比較に == 演算子を使用することの妥当性について疑問が生じています。
問題ステートメント
次のコード スニペットを考えてみましょう:
Integer cdiCt = ...; Integer cdsCt = ...; ... if (cdiCt != null && cdsCt != null && cdiCt != cdsCt) mismatch = true;
このコードは、cdiCt と cdsCt の値が等しい場合に不一致を true に設定しているようです。この問題は、ブール式を調べると明らかになります。値が実際に等しい場合は false と評価されますが、実行が続行されると、どういうわけか不一致が依然として true に設定されます。
解決策
この問題の解決策は、equals() メソッドを使用することです代わりに:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
説明
== 演算子は 2 つのオブジェクトのメモリ参照を比較し、equals() メソッドはそれらの値を比較します。 int のようなプリミティブ型の場合、== 演算子は期待どおりに機能します。ただし、Integer のようなオブジェクトの場合、== 演算子は、参照がキャッシュされた同じ値を指しているかどうかのみをチェックします。
JVM は、パフォーマンス上の理由から、-128 から 127 までの Integer 値をキャッシュします。したがって、== を使用して 2 つの整数を比較する場合、演算子は両方の値がこの範囲内にある場合にのみ true を返します。指定されたシナリオでは、値がこの範囲外にある可能性が高く、予期しない動作が発生します。
結論
== を使用してプリミティブを比較することは許容されますが、 Integer などのラップされたオブジェクトを比較するには、equals() メソッドを使用することをお勧めします。これにより、関連する値に関係なく、一貫した動作が保証されます。
追加リソース
以上がJava 整数の比較: `==` と `equals()` をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。