java中short和int的行为

时间:2012-08-26 13:42:16

标签: java

我在scjp准备书中看到了这个问题。

public class Yikes {
    public static void go(Long n) {
        System.out.println("Long ");
    }
    public static void go(Short n) {
        System.out.println("Short ");
    }
    public static void go(int n) {
        System.out.println("int ");
    }
    public static void main(String [] args) {
        short y = 6;
        long z = 7;
        go(y);
        go(z);
    }
}

输出为int Long

我将short数据类型变量传递给重载方法go。现在go也有short数据类型版本。然后如何调用int的那个?这种行为的原因是什么?

我是java的新手。所以请在这里帮助我。

1 个答案:

答案 0 :(得分:9)

由于没有方法go(short s)可供选择,Java必须选择另一个方法。这可以通过两种方式完成:

  1. 加宽,将short扩展为int
  2. Autoboxingshort周围有Short,相应的包装类。
  3. 由于扩展 autoboxing (在Java 5中引入)更长,所以JVM首先选择此备选方案(如果可用)。

    因此,调用go(int n)方法。