ホームページ > Java > &#&チュートリアル > Java 整数の比較: `==` と `equals()` をいつ使用する必要がありますか?

Java 整数の比較: `==` と `equals()` をいつ使用する必要がありますか?

Barbara Streisand
リリース: 2024-12-26 18:03:11
オリジナル
457 人が閲覧しました

Java Integer Comparison: When Should I Use `==` vs. `equals()`?

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() メソッドを使用することをお勧めします。これにより、関連する値に関係なく、一貫した動作が保証されます。

追加リソース

  • [不変オブジェクト / ラッパー クラス]キャッシュ](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Integer.html#Immutable_Objects_.2F_Wrapper_Class_Caching)
  • [なぜできるのかコンパイラ/JVM がオートボックス化を行うだけではなく、 ](https://stackoverflow.com/questions/12595136/why-cant-the-compiler-jvm-just-make-autoboxing-just-work)

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

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