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