简短的int自动推广

时间:2015-03-26 13:03:22

标签: 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);
    }
}

在打印输出之前,如何将short值转换为int?

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

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

  

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

     
      
  1. 身份转换(第5.1.1节)

  2.   
  3. 扩大原始转换(第5.1.2节)

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

  6.   
  7. 拳击转换(§5.1.7),可选地后跟加宽引用   转化

  8.   
  9. 取消装箱转换(第5.1.8节),可选地后跟加宽   原始转换。

  10.   

您期望的是a boxing conversion,但您获得的是a widening primitive conversion

您可以阅读有关拳击here的更多信息,以正确理解shortShort之间的关系。