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
値を比較するために使用することはまだ正当ではありませんか?
以下のすべての良い答えに加えて、次のスタックオーバーフローリンクにはかなりの追加情報があります。実際には元の質問に答えていたはずですが、質問でオートボクシングについて言及しなかったため、選択した提案には表示されませんでした。