我在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的新手。所以请在这里帮助我。
答案 0 :(得分:9)
由于没有方法go(short s)
可供选择,Java必须选择另一个方法。这可以通过两种方式完成:
short
扩展为int
short
周围有Short
,相应的包装类。由于扩展比 autoboxing (在Java 5中引入)更长,所以JVM首先选择此备选方案(如果可用)。
因此,调用go(int n)
方法。