好的,这是代码:
public class Dec26 {
public static void main(String args[]) {
short a1=6;
new Dec26.go(a1);
new Dec26.go(new Integer(7));
}
void go(Short x){System.out.println("S");}
void go(Long x){System.out.println("L");}
void go(int x){System.out.println("i");}
void go(Number n){System.out.println("N");}
}
为什么输出“iN”而不是“ii”?
答案 0 :(得分:0)
当包装类的对象为:
时,Java编译器应用拆箱所以,因为Integer类有一个合适的方法,void go(Number n)
因为Number
类是Integer
的超类而且这个方法也接受Integer
个对象。
因此,编译器无需将Integer
取消装箱到int
。
答案 1 :(得分:0)
编译器首先选择最接近的匹配而不进行自动装箱/取消装箱。它找到了go(Number)并且没有使用拆箱。