2015-04-26 16 views
5
public class AutoBoxingAndUnBoxing 
{ 
    public static void main(String[] args) 
    { 
     Integer x = 127; 
     Integer y = 127; 
     System.out.println(x == y);//true 

     Integer a = 128; 
     Integer b = 128; 
     System.out.println(a == b);//false 
     System.out.println(a); // prints 128 
    } 
} 

x==y是怎麼回事a==b是錯誤的?如果它是基於值(Integer -128 To 127),那麼'a'應該打印-128對不對?使用==運算符進行參考比較

+2

「整數」的範圍是-2^31到2^31 - 1。它不是-128到127;這是'byte'的範圍。 –

回答

2

當比較Integer對象時,==運算符可能僅適用於[-128,127]之間的數字。再看JLS

如果被裝箱值p爲真,假,字節,或在 範圍\ u0000的一個char到\ u007f,或-128和127之間 int或短號碼(含),那麼讓r1和r2是p的任何兩次裝箱 轉換的結果。 r1 == r2總是如此。

由於珍視你在上述範圍比較都沒有,除非你使用Integer#equals結果將進行評估,以false

+0

好吧,但如果範圍是-128到127,127後的值是多少? – kittu

+0

@kittu你是什麼意思「價值」?這些值由於性能問題而被緩存,超出該範圍的值應使用「equals」進行比較。 – Maroun

+0

我的意思是在我的情況下'a == b'是錯誤的嗎?內部發生了什麼使其變得虛假? :/ – kittu