为什么我在尝试初始化时会收到错误Double
to an int
,即使在使用原始类型时它不会抛出异常,double
?
Double a = 1; // error - incompatible types
Double b = 1.0; // OK
double c = 1; // OK
为什么班级之间的行为不同Double
和原始类型,double
?
当你初始化你的Double
as:
Double a = 1;
需要做两件事:
- Boxing
int
to Integer
- 扩大自
Integer
to Double
虽然,拳击很好,但从Integer
to Double
无效。所以,它无法编译。
需要注意的是,Java不支持Widening其次是Boxing转换,如指定JLS §5.2:
赋值上下文允许使用以下之一:
- 身份转换(§5.1.1)
- 扩大原始转换(§5.1.2)
- 扩大参考转换(§5.1.5)
- 装箱转换(第 5.1.7 节),可选地随后进行加宽
参考转换
- 拆箱转换(第 5.1.8 节),可选地后跟加宽
原始转换。
Your 2nd assignment goes through boxing conversion.
While 3rd assignment goes through widening conversion.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)