自动装箱/拆箱在Java中是如何工作的?
从 JDK 5.0 开始,Java 中引入了自动装箱/拆箱。这个技巧既简单又有用,但是当我开始测试包装器类和基元类型之间的不同转换时,我对自动装箱的概念在Java中的工作方式感到非常困惑。例如:
拳击
int intValue = 0;
Integer intObject = intValue;
byte byteValue = 0;
intObject = byteValue; // ==> Error
在尝试不同的情况(, , , )后,编译器接受的唯一情况是当情感运算符右侧的值的类型为 。当我查看源代码内部时,我发现它只实现了一个带有参数的构造函数。short
long
float
double
int
Integer.class
int
所以我的结论是,自动装箱的概念是基于包装类中实现的构造函数。我想知道这个结论是否属实,或者自动拳击是否使用了另一个概念?
拆 箱
Integer intObject = new Integer(0);
byte byteValue = intObject; // ==> Error (the same Error with short)
int intValue = intObject;
double doubleValue = intObject;
我关于取消装箱的结论是,包装类给出了由对象包装在相应类型中的值( ==>),然后编译器使用转换基元类型的常用规则( => = > = > = > = > )。我想知道这个结论是否正确,或者自动开箱是否使用了另一个概念?Integer
int
byte
short
int
long
float
double