Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Integer类取消对int值的装箱_Java_Logical Operators_Unboxing - Fatal编程技术网

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 x、 intValue()
在这种情况下,变量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()));
}