自动将short转换为int

5
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 value)是如何转换为整型(int)的?

我原以为只有当数据类型 short 不可用时才会进行扩宽,然后寻找下一个可用的数据类型,而这里明确定义了 short 数据类型,那么自动提升是如何发生的呢?


1
我非常确定 shortShort 不是同一件事。尝试使用一个接受 short n 的方法来验证它。 - Jon Egeland
在您的情况下,不建议使用自动装箱。 - Prashant
2个回答

9
绑定顺序如下所示:
  1. 精确匹配 (例如 int--> int)
  2. 提升类型 (例如 int --> long)
  3. 自动装箱/拆箱 (例如 int --> Integer)
  4. 可变参数 (例如 int --> int...)

5
好的,当没有接受short类型参数的方法时,你有两个选择:将它装箱成Short或转换为整数。JLS指出,第二个选项是首选:

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

  1. 标识转换(§5.1.1)

  2. 扩展基本转换(§5.1.2)

  3. 扩展引用转换(§5.1.5)

  4. 装箱转换(§5.1.7),可选择后跟扩展引用 转换

  5. 拆箱转换(§5.1.8),可选择后跟扩展 基本转换。

你期望的是装箱转换,但实际得到的是扩展基本转换

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接