以下作品
float a=3;
但以下没有:
Float a=3;
不应该将 3 自动提升为 float (因为扩大转换不需要显式转换)然后 Boxed 到 Float 类型?
是因为我在 Khalid Mogul 的 Java 书中读到的一条规则吗?
任何拳击转换都不能跟随扩大转换
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);
希望这可以帮助。
Float Integer
^ ^
| |
| |
v v
float <-----------> int
在原语和包装器之间存在装箱/拆箱转换,并且存在从一个数字原语到另一个的提升。但是 Java 无法进行两次这种转换(在您的情况下从 int 转换为 Float)。
浮点数 a= 3.0f; 将工作。