从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
)。我想知道这个结论是否正确,还是自动拆箱使用了另一个概念?
谢谢你提前:)
慕码人8056858
白衣非少年
相关分类