Java:扩大和自动装箱转换问题

2024-03-12

我不明白为什么java不进行加宽然后自动装箱。

Integer i = (short) 10;

我认为会发生以下情况:

  1. 首先缩小转换范围10 to short.
  2. short然后会扩大到int.
  3. 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,它涉及赋值转换:

赋值上下文允许使用以下之一:

  • 身份转换(§5.1.1)

  • 扩大原始转换(§5.1.2)

  • 扩大参考转换(§5.1.5)

  • 装箱转换(§5.1.7)可选地后跟加宽 参考转换

  • 拆箱转换(第 5.1.8 节),可选地后跟加宽 原始转换。

它无法同时应用两种转换(加宽基元转换和装箱转换);这里只能应用一种转换,因此它必然会导致错误。

解决方案是投射short回到一个int(强制转换),这将允许赋值转换成为装箱转换:

Integer i = (int) (short) 10;

(或者在这里,不要将其投射到short首先。)

Integer i = 10;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:扩大和自动装箱转换问题 的相关文章

随机推荐