3

以下作品

float a=3;

但以下没有:

Float a=3;

不应该将 3 自动提升为 float (因为扩大转换不需要显式转换)然后 Boxed 到 Float 类型?

是因为我在 Khalid Mogul 的 Java 书中读到的一条规则吗?

任何拳击转换都不能跟随扩大转换

4

3 回答 3

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);

希望这可以帮助。

于 2010-09-09T09:43:43.090 回答
2
Float               Integer
  ^                    ^
  |                    |
  |                    |
  v                    v
float <----------->   int

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

于 2010-09-09T09:46:27.723 回答
-1

浮点数 a= 3.0f; 将工作。

于 2010-09-09T10:30:03.447 回答