简短的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,但是这里定义了短数据类型,那么自动推广又是怎么发生的呢?

绑定序列的工作原理如下:

  1. 完全匹配(Ex.int int--> int
  2. 促销(例如int --> long
  3. Autoboxing / Unboxing(例如int --> Integer
  4. Varags(例如int --> int...

好的,当没有接受short方法时,有两个选项:将其自动放入Short或转换为整数。 JLS表示,首选的第二种选择:

方法调用上下文允许使用以下之一:

  1. 身份转换(第5.1.1节)

  2. 扩展的原始转换(第5.1.2节)

  3. 扩大参考转换(第5.1.5节)

  4. 一个拳击转换(§5.1.7),随后可以加宽引用转换

  5. 一个拆箱转换(第5.1.8节),可选地后跟一个加宽的基元转换。

你期望的是a boxing conversion ,但你得到的是a widening primitive conversion

你可以在这里阅读更多关于拳击的内容,以正确理解shortShort之间的关系。