[解決済み] Javaです。整数の等号と==の比較
質問
Java 1.5では、ほとんどの場合、以下のように交換することができます。
Integer
とは
int
を多くの場面で使用することができます。
しかし、私のコードに潜在的な欠陥が見つかり、少し驚いています。
次のようなコードです。
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
は、どのような状況か判断できませんが、値が等しいときに誤ってmismatchを設定しているように見えました。Eclipseでブレークポイントを設定すると
Integer
の値は両方とも137で、ブーリアン式をインスペクトしたらfalseと表示されましたが、それを踏み越えるとmismatchがtrueに設定されていました。
条件を変更する。
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
は問題を修正しました。
なぜこのようなことが起こったのか、どなたか教えていただけませんか?今のところ、自分のPCのローカルホストでしかこの挙動を見たことがありません。この特別なケースでは、コードは約20の比較を成功裏に通過しましたが、2つの比較で失敗しました。この問題は一貫して再現可能でした。
もしこれが一般的な問題であれば、私たちの他の環境(devとtest)でもエラーが発生するはずですが、今のところ、このコードスニペットを実行する数百のテストの後、誰もこの問題を報告していません。
を使用するのはやはり正当ではないのでしょうか?
==
を比較するために、2つの
Integer
の値ですか?
以下のすべての素晴らしい回答に加えて、以下のstackoverflowのリンクにかなりの追加情報があります。本当は私の最初の質問に答えてくれるはずだったのですが、私が質問の中でautoboxingに言及しなかったため、選択された候補に表示されなかったのです。
なぜコンパイラやJVMは、オートボックスを「ただ動く」ようにできないのですか?
解決方法は?
JVMはInteger値をキャッシュしています。そのため
==
は-128から127の間の数に対してのみ機能します。
参考にしてください。 #Immutable_Objects_.2F_Wrapper_Class_Caching
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaScriptで文字列を整数に変換する方法は?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
プロジェクトの依存関係を解決できなかった 解決
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
linux run jarfile Invalid or corrupt jarfile error.
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
JSPで「リストが型解決できない!」の解決方法
-
ローカルリソースのロードが許可されていない場合の解決策