Java 1.5以降、多くの状況でInteger
ほとんど交換できます。int
しかし、コードに潜在的な欠陥があり、少し驚いていました。
次のコード:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
値が等しい場合、どのような状況であるかはわかりませんが、誤って設定の不一致が発生しているように見えました。Eclipseにブレークポイントを設定し、Integer
値が両方とも137であることを確認し、ブール式を調べたところ、falseと表示されましたが、ステップオーバーすると、不一致がtrueに設定されていました。
条件を次のように変更します。
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
問題を修正しました。
なぜこれが起こったのか、誰かが光を当てることができますか?これまでのところ、自分のPC上のローカルホストでの動作のみを確認しました。この特定のケースでは、コードは約20回の比較を正常に通過しましたが、2回で失敗しました。問題は一貫して再現可能でした。
これが一般的な問題である場合は、他の環境(開発とテスト)でエラーが発生しているはずですが、これまでのところ、このコードスニペットを実行した何百ものテストの後で問題を報告した人は誰もいません。
2つの値==
を比較するために使用することはまだ合法ではありませんか?Integer
以下のすべての細かい答えに加えて、次のstackoverflowリンクにはかなりの追加情報があります。実際には元の質問に答えていたはずですが、質問でオートボクシングについて言及しなかったため、選択した提案には表示されませんでした。