Java 为什么Short方法调用integer方法?
这个程序正在给出输出Java 为什么Short方法调用integer方法?,java,overload-resolution,Java,Overload Resolution,这个程序正在给出输出 public class Yikes { public static void go(Long n) { System.out.print("Long "); } public static void go(Short n) { System.out.print("Short "); } public static void go(int n) { System.out.print(
public class Yikes {
public static void go(Long n) {
System.out.print("Long ");
}
public static void go(Short n) {
System.out.print("Short ");
}
public static void go(int n) {
System.out.print("int ");
}
public static void main(String[] args) {
short y = 6;
long z = 7;
go(y);
go(z);
}
}
我以为输出是正确的
int Long
原因是什么?试试这个:
而不是
short Long
试一试
编译器更喜欢将
short
转换为int
,而不是将其装箱为short
对象。解释了原因:
m(Object)
的类中声明m(Object)
会导致不再为某些调用表达式选择m(Object)
(例如m(null))
,因为m(Object[])
更具体
go(Short n)
。相反,它认为go(int n)
是一种适用的方法。此方法适用,因为short
正在转换为int
public static void go(Short n) {
System.out.print("Short ");
}
public static void go(short n) {
System.out.print("Short ");
}