简短的int自动推广

4 java

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在打印输出之前,短值是如何转换为int的?

我认为只有当dataype-short不可用时才能扩展工作,所以它会查找下一个可用的数据类型,在这种情况下是int,但是这里定义了短数据类型,那么为什么自动推广会发生?

OPK*_*OPK 8

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

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


Dmi*_*urg 5

好的,当没有接受的方法时,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.