[解決済み] Integer.valueOf(String)による==比較で、127と128で結果が異なるのはなぜですか?
質問
これらのコードの行が異なる値を返す理由が全く分かりません。
System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));
と出力されます。
true
false
true
なぜ最初のものは
true
を返し、2番目のものは
false
? との間に私の知らない何か違いがあるのでしょうか?
127
と
128
? (もちろん、私が知っているのは
127
<
128
.)
また、3つ目はなぜ
true
?
回答はこちら
この質問について
を返すことができるのか、まだ理解していません。
true
そして、なぜ2行目のコードでは
false
.
解決方法は?
ここに顕著な違いがあります。
valueOf
は
Integer
オブジェクトがあり、その値は -128 から 127 の間にキャッシュされている可能性があります。 このため、最初の値では
true
- を返し、2番目の値は
false
- 128 はキャッシュされた値ではないので、2 つの別々の
Integer
のインスタンスを作成します。
重要なのは
とのリファレンスを比較することになります。
Integer#valueOf
で、キャッシュがサポートする値よりも大きな値を比較する場合、キャッシュは
ない
と評価されます。
true
は、たとえ解析された値が同等であっても(例.
Integer.valueOf(128) == Integer.valueOf(128)
). あなたは
が必要です。
使用
equals()
の代わりに
parseInt
は、プリミティブな
int
. このため、3番目の値では
true
-
128 == 128
が評価され、当然ながら
true
.
さて、この3つ目の結果を作るために、かなりのことが起こります。
true
:
-
アンボックスの変換が発生する は、使用している同値演算子と、持っているデータ型に関して、すなわち
int
とInteger
. を取得していますね。Integer
からvalueOf
もちろん、右手側で。 -
変換後、あなたは2つのプリミティブな
int
の値です。 比較はプリミティブに関して期待されるのと同じように行われるので、結局は128
と128
.
関連
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] イコール、エクル、==、==の違いは何ですか?
-
[解決済み] なぜ無限ループになるのですか?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
-
[解決済み】sumの順番を変えると違う結果になるのはなぜですか?
-
[解決済み] Javaで整数のラッパーを比較するとき、128==128は偽で、127==127は真なのはなぜですか?
最新
-
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 エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
サーブレットクラスのインスタンス化エラーの解決法
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
[解決済み] Javaにおける==とequals()の違いは何ですか?
-
[解決済み] javaのparseInt()とvalueOf()の違い?
-
[解決済み】JavaとC#のintとIntegerの違いは何ですか?