Java 使用Integer类取消对int值的装箱
在这种情况下,变量Java 使用Integer类取消对int值的装箱,java,logical-operators,unboxing,Java,Logical Operators,Unboxing,在这种情况下,变量y在前两个语句之后的值是多少?我假设它是整数7,但我的书中说对象的自动取消装箱只发生在关系运算符”中。我有点困惑变量整数y是如何获取其值的。在新整数(x)中是否发生了任何取消装箱 Integer x = 7; Integer y = new Integer(x); println( "x == y" + " is " + (x == y)) 在这种情况下,intliteral 7将自动装箱到Integer变量x中 Integer y = new Integer(x);
y
在前两个语句之后的值是多少?我假设它是整数7,但我的书中说对象的自动取消装箱
只发生在关系运算符<>”中。我有点困惑变量整数y
是如何获取其值的。在新整数(x)
中是否发生了任何取消装箱
Integer x = 7;
Integer y = new Integer(x);
println( "x == y" + " is " + (x == y))
在这种情况下,int
literal 7将自动装箱到Integer
变量x
中
Integer y = new Integer(x);
这涉及到将Integer
变量x
自动解装箱为int
(临时)变量,该变量被传递给Integer
构造函数。换句话说,它相当于:
Integer y = new Integer(x.intValue());
在此语句之后,
y
指向一个新对象,该对象不同于x
,但包含相同的int
包装值。当编译器确定要比较值时,就会取消装箱。使用=
可以比较对象,因此给出false
,因为==
是对象之间的有效操作。使用
时,没有对象
的概念,因此可以确定您指的是数字
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=7;
整数y=新整数(x)+1;
System.out.println(“x==y”+”是“+(x==y));
System.out.println(“x.intValue()==y.intValue()”+“是”+(x.intValue()==y.intValue());
System.out.println(“x
x==y为假
x、 intValue()==y。intValue()为真
x在这种情况下,变量y在前两个语句之后的值是多少
变量
y
的值是对一个整数对象的引用,该整数对象包含值7可能重复的@AbimaranKugathasan。我理解==比较两个对象时会发生什么,但我不理解y
如何获取其值。请注意“x==y”+“是”+x==y
的意思是:(“x==y“+”是“+x)==y
,这不是您想要的。使用括号:“x==y”+”是“+(x==y)
@Jesper我甚至没有注意到这个错误。谢谢。所以在新整数(x)中的x
暂时取消绑定到值类型int
,因此变量y的整数构造函数可以生效。装箱和取消装箱的顺序起初让我有点困惑。现在它有意义了。谢谢。@Ian是的,它进行取消装箱是因为构造函数采用的是原语int
,而不是整数
。
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()));
}