2015-07-13 83 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整数对象。