2011-08-02 13 views
0

可能性の重複:
Wrapper class and == operator数値昇進と平等?

私は私の友人からパズルを持っています。ここにあります:

public class Test{ 
    public static void main(String[] args){ 
     Integer i = 1000; //10 
     Integer y = 1000; //10  
     System.out.println(i == y); 
    } 
} 

結果はFALSEになります。そのとおり。しかし、i、yの値を10に置き換えると、結果はTRUEになります。

私が読んだところでは、演算子==を参照変数に適用すると、それらが同じオブジェクトを参照しているかどうかがテストされます。私はなぜそのような結果が得られるのか分かりませんが、数値昇進の問題を推測します。私は本当に助けが必要です。 すべてに感謝します。

答えて

2

数値リテラルとしての10と1000はint型なので、昇格されるものはありません。

しかし、ほとんどの値が小さいか、小さな値が頻繁に使用されるため、stringpoolと同様に小さなInteger-Objects用の値プールがあります。しかし、プールのサイズを制限するために、-128から127の間のいくつかの値しかカバーしません。

オブジェクトの場合、常にequalsと比較し、==を持つ基本型のみを比較します。

+0

ありがとうございました。私はこの事件を覚えています。 –