使用Integer Class拆箱int值

时间:2015-07-13 10:25:46

标签: java logical-operators unboxing

在这种情况下,前两个语句之后变量y的值是多少?我假设它是整数7,但是我的书中说automatic unboxing个对象只出现在关系运算符< >&#34 ;.我对变量Integer y如何获得它的价值感到有些困惑。 unboxing中是否有newInteger(x)

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

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

2 个答案:

答案 0 :(得分:3)

当编译器某些您希望比较时,会发生取消装箱。使用==可以比较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&lt;你是真的

     

x.intValue()&lt; y.intValue()是真的

  

在这种情况下,前两个陈述之后变量y的值是多少?

变量y的值是对包含值7 的Integer对象的引用。

答案 1 :(得分:2)

Integer x = 7;

在这种情况下,int文字7会自动加入Integer变量x

Integer y = new Integer(x);

这涉及将Integer变量x自动拆箱到int(临时)变量中,该变量将传递给Integer构造函数。换句话说,它相当于:

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

在此声明之后,y指向一个与x不同但包含相同int包裹值的新对象。