yap*_*m01 4 java type-conversion
我不明白为什么 java 不进行扩展然后自动装箱。
Integer i = (short) 10;
Run Code Online (Sandbox Code Playgroud)
我认为会发生以下情况:
10到缩小转换short。short然后会扩大到int.int然后将自动装箱到Integer.相反,它是一个编译错误。
示例 2:
短 x = 10;
整数 y = x;
这也失败了。
根据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;
Run Code Online (Sandbox Code Playgroud)
(或者在这里,首先不要将其转换short为。)
Integer i = 10;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |