2015-07-13 82 views
2

在這種情況下,前兩個語句後變量y的值是什麼?我假設它是整數7,但我的書上說的對象automatic unboxing只與關係運算符<>出現。」我有點困惑Integer y如何變量得到它的價值。任何unboxing是否發生在newInteger(x)使用Integer類別拆箱int值

Integer x = 7; 
Integer y = new Integer(x); 

println("x == y" + " is " + (x == y)) 
+0

可能重複[什麼比較整數與==做什麼?](http://stackoverflow.com/questions/3689745/what-exactly-does-comparing-integers-with-do) –

+0

@AbimaranKugathasan我明白當==比較兩個對象,但我不明白怎麼y''獲取其值會發生什麼。 – Ian

+2

注意' 「X == Y」 + 「是」 + X == y'的意思是:'( 「X == Y」 + 「是」 + x)的== y',這是不是你想要的。使用括號:' 「X == Y」 + 「是」 +(X == Y)' – Jesper

回答

2
Integer x = 7; 

在這種情況下,int字面7被自動盒裝入Integer可變x

Integer y = new Integer(x); 

這INV olves將Integer變量x自動拆箱爲int(臨時)變量,該變量被傳遞給Integer構造函數。換句話說,它是等效於:

Integer y = new Integer(x.intValue()); 

此語句之後,y指向一個新的對象比x不同但包含相同int包裹值。

+0

SO x的中'新的整數(X)是'所以int'整數構造爲變量y可以生效暫時取消裝箱到值類型'。起初,拳擊和拆箱的順序讓我感到有點困惑。現在它是有道理的。謝謝。 – Ian

+0

@Ian是的,它確實拆箱,因爲構造函數接受一個原始的'int',而不是'Integer'。 – manouti

2

當編譯器是某些,你想比較發生拆箱。使用==可以比較Objects,因此給出false,因爲==是對象之間的有效操作。由於<>沒有Object < OtherObject的概念,所以可以肯定你是用數字表示的。

public void test() { 
    Integer x = 7; 
    Integer y = new Integer(x) + 1; 

    System.out.println("x == y" + " is " + (x == y)); 
    System.out.println("x.intValue() == y.intValue()" + " is " + (x.intValue() == y.intValue())); 
    System.out.println("x < y" + " is " + (x < y)); 
    System.out.println("x.intValue() < y.intValue()" + " is " + (x.intValue() < y.intValue())); 
} 

X == y是假

x.intValue()== y.intValue()爲真

X < y爲真

x.intValue( )< y.intValue()爲真


在這種情況下是什麼變量y的前兩個語句後的值?

可變y的值是一個參照包含值7整數對象。