我不明白为什么java不进行加宽然后自动装箱。
Integer i = (short) 10;
我认为会发生以下情况:
- 首先缩小转换范围
10
to short
.
-
short
然后会扩大到int
.
-
int
然后会自动装箱到Integer
.
相反,这是一个编译错误。
示例2:
短x=10;
整数 y = x;
这也失败了。
根据JLS,第 5.2 节 http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.2,它涉及赋值转换:
赋值上下文允许使用以下之一:
它无法同时应用两种转换(加宽基元转换和装箱转换);这里只能应用一种转换,因此它必然会导致错误。
解决方案是投射short
回到一个int
(强制转换),这将允许赋值转换成为装箱转换:
Integer i = (int) (short) 10;
(或者在这里,不要将其投射到short
首先。)
Integer i = 10;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)