在Java中为Float包装器分配整数值

时间:2010-09-09 09:31:55

标签: java boxing

以下作品

float a=3;

但以下情况并非如此:

Float a=3;

不应该3自动提升为浮点数(因为扩展转换不需要显式转换)然后Boxed to Float类型?

这是因为我在Khalid Mogul的Java书中读过的规则吗?

  

无法跟随扩展转化   通过任何拳击转换

3 个答案:

答案 0 :(得分:3)

Float a=3;不起作用的原因是因为编译器将3包装到它的Integer对象中(实质上,编译器执行此操作:Float a = new Integer(3);并且这已经是编译器错误)。 Float对象不是和Integer对象(即使它们来自同一个Number对象)。

以下作品:

Number a = 3;

本质上由编译器翻译为:

Number a = new Integer(3);

或正如Joachim Sauer所说,

Number a = Integer.valueOf(3);

希望这有帮助。

答案 1 :(得分:2)

Float               Integer
  ^                    ^
  |                    |
  |                    |
  v                    v
float <----------->   int

在原语和包装器之间存在装箱/拆箱转换,并且存在从一个数字原语到另一个数字原语的提升。但Java无法进行两次转换(在您的情况下从int转换为Float)。

答案 2 :(得分:-1)

浮动a = 3.0f;会工作的。