6

我在 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中很新。所以请在这里帮助我。

4

1 回答 1

9

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

  1. 扩大,扩大short到一个int
  2. Autoboxingshort ,用包围Short,对应的包装类。

由于加宽自动装箱(在 Java 5 中引入)的时间更长,因此如果可用,JVM 会首先选择此替代方案。

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

于 2012-08-26T13:46:14.877 回答