我在Java中使用自动装箱和拆箱。 Autoboxing的返回类型很好。没有问题。但是对于拆箱,返回类型将以Integer而不是int形式出现。请在下面找到我的编码,请告诉我
package JavaLearning;
public class NumberLearning {
public static void main(String[] args) {
Integer x=5; // AutoBoxing
System.out.println(x.getClass().getName()); // Display the type with the package name
System.out.println(x);
x=x+5; // Unboxing
System.out.println(x.getClass().getName()); // Display the type with the package name
System.out.println(x);
}
}
输出:
java.lang.Integer
5
java.lang.Integer
10
答案 0 :(得分:1)
它以Integer
的形式出现,因为您将x+5
的结果存储到x
Integer
,因此再次进行装箱。
要查看该类型是int
,您应该直接打印表达式x+5
的类型,但是您无法执行此操作,因为它已取消装箱到{{1}并且你不能在基本类型上调用方法。
答案 1 :(得分:1)
变量x
声明为Integer
。因此,在x = x + 5;
行中,它会自动重新装箱。如果您想避免它,请使用int y = x + 5;
。但请记住,你不能在原始类型上调用.getClass()
。
答案 2 :(得分:0)
您的问题是Integer x
保留了对象引用,并且永远不会分配给基元。
这应该为您提供正确的拆箱
int newX = x + 5;
将包装类型(Integer)的对象转换为其对应的 primitive(int)值称为unboxing。 Java编译器适用 当包装类的对象是:
时取消装箱
- 作为参数传递给期望值为的方法 相应的原始类型。
- 分配给的变量 相应的原始类型。
答案 3 :(得分:0)
首先,变量的类型是固定的。在您的示例中,x
的类型为java.lang.Integer
,并且无法更改为int
。
您正在进行的测试无效;除x
之外,您永远不会看到java.lang.Integer
的类型更改为其他任何内容。
当你x = x + 5;
时,会发生很多事情:
x
右侧的=
已取消装箱至int
5
+
操作的结果再次装入Integer
并分配给x