在Java中为浮点包装器分配整数值
以下作品在Java中为浮点包装器分配整数值,java,boxing,Java,Boxing,以下作品 float a=3; 但以下情况并非如此: Float a=3; 3不应该自动升级为浮点型(因为加宽转换不需要显式转换),然后装箱为浮点型吗 这是因为我在Khalid Mogul的Java书中读到了一条规则吗 无法遵循加宽转换 通过任何拳击转换 Float a=3的原因不起作用是因为编译器将3包装到它的整数对象中(本质上,编译器是这样做的:Float a=new Integer(3);这已经是一个编译器错误)。浮点对象不是整数对象(即使它们来自同一个Number对象) 以下工作:
float a=3;
但以下情况并非如此:
Float a=3;
3不应该自动升级为浮点型(因为加宽转换不需要显式转换),然后装箱为浮点型吗
这是因为我在Khalid Mogul的Java书中读到了一条规则吗
无法遵循加宽转换
通过任何拳击转换
Float a=3的原因代码>不起作用是因为编译器将3
包装到它的整数对象中(本质上,编译器是这样做的:Float a=new Integer(3);
这已经是一个编译器错误)。浮点对象不是整数对象(即使它们来自同一个Number
对象)
以下工作:
Number a = 3;
本质上,编译器将其翻译为:
Number a = new Integer(3);
或者正如约阿希姆·绍尔所提到的
Number a = Integer.valueOf(3);
希望这有帮助。Float Integer
Float Integer
^ ^
| |
| |
v v
float <-----------> int
^ ^
| |
| |
v v
浮点整数
原语和包装器之间存在装箱/拆箱转换,并且存在从一个数字原语到另一个数字原语的升级。但是Java不能进行两次这种转换(在您的例子中,从int转换为Float)。Float a=3.0f;将起作用。实际上,自动装箱相当于整数。valueOf(3)
而不是新整数(3)
。区别在于前者对公共值进行了一些缓存。谢谢。3被转换为整数。valueOf(3)但是当我们将3转换为(Float)3时会发生什么?现在调用的是Float.valueOf(3)吗?@Daud,不是……自动装箱是由编译器完成的,因此本质上,编译器将执行以下操作:Float a=(Float)Integer.valueOf(3)代码>这仍然是一个错误。很好。我这样做是为了鼓励回复者在发布之前先证明他们的答案。这给那些阅读你答案的人一种解脱感。