可能性の重複:
Wrapper class and == operatorJavaラッパー・クラスが平等オブジェクト - 奇妙な行動
をラッパークラスのオブジェクト等価演算子は、包まれた値がであるかどうかに応じて異なる結果を生成しているかのように思えますバイト範囲かどうかを判断する。ここでは、この動作を実証するためのコードスニペットです:
smaller than byte
same
larger than byte
not same
注:
System.out.println("smaller than byte");
Integer i1 = 1;
Integer i2 = 1;
if (i1 == i2) System.out.println("same");
if (i1 != i2) System.out.println("not same");
System.out.println("larger than byte");
Integer i3 = 128;
Integer i4 = 128;
if (i3 == i4) System.out.println("same");
if (i3 != i4) System.out.println("not same");
は、次の出力が生成され、私は、Linux上で(1.6.0_24-B07を構築)のHotSpotでこの出力を得ました。 LongとおそらくShortについても同じことが起こります(それはテストされていません)。
注:Linux上の他のHotSpotビルドでも同じ出力 誰でも説明できますか?
小編集、ちょうどそれが少しより面白くするために:
エンドで
if (i3 <= i4 && i3 >= i4) System.out.println("same after all...");
の追加、版画 "same after all...
"。
ありがとうございます - 私は現在SCJPのために学んでおり、公式の学習ガイドにも同様の例があります。この動作について著者が説明する説明は異なっています(明らかに間違っています)。 – maciek
@maciek:本当ですか?あなたが間違っていると思っているソースや短い抜粋を伝えてください。 –
まあ、私は十分に注意深く読んでいないようです。実際にはこの文章では、この動作がShortとIntegerに-128と127の間にしか適用されないことが実際に述べられています。私の失敗 – maciek