简短的int自动推广
public class Yikes1 { public static void go(Long n) { System.out.println("Long "); // printed } public static void go(Short n) { System.out.println("Short "); // don't know why isn't this printed } public static void go(int n) { System.out.println("int "); // printed } public static void main(String [] args) { short y = 6; long z = 7; go(y); go(z); } }
在打印输出之前,如何将short值转换为int?
我认为只有当dataype-short不可用时才能扩展工作,所以它会查找下一个可用的数据类型,在这种情况下是int,但是这里定义了短数据类型,那么自动推广又是怎么发生的呢?
绑定序列的工作原理如下:
- 完全匹配(Ex.int
int--> int
) - 促销(例如
int --> long
) - Autoboxing / Unboxing(例如
int --> Integer
) - Varags(例如
int --> int...
)
好的,当没有接受short
方法时,有两个选项:将其自动放入Short
或转换为整数。 JLS表示,首选的第二种选择:
方法调用上下文允许使用以下之一:
身份转换(第5.1.1节)
扩展的原始转换(第5.1.2节)
扩大参考转换(第5.1.5节)
一个拳击转换(§5.1.7),随后可以加宽引用转换
一个拆箱转换(第5.1.8节),可选地后跟一个加宽的基元转换。
你期望的是a boxing conversion
,但你得到的是a widening primitive conversion
。
你可以在这里阅读更多关于拳击的内容,以正确理解short
和Short
之间的关系。