以下作品
float a=3;
但以下情况并非如此:
Float a=3;
不应该3自动提升为浮点数(因为扩展转换不需要显式转换)然后Boxed to Float类型?
这是因为我在Khalid Mogul的Java书中读过的规则吗?
无法跟随扩展转化 通过任何拳击转换
答案 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;会工作的。