可以请任何人解释我这个Autoboxing?

时间:2013-10-06 06:28:17

标签: java oracle scjp autoboxing

好的,这是代码:

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”?

2 个答案:

答案 0 :(得分:0)

当包装类的对象为:

时,Java编译器应用拆箱
  • 作为参数传递给期望值为的方法 相应的原始类型。
  • 分配给相应基元类型的变量。

所以,因为Integer类有一个合适的方法,void go(Number n)因为Number类是Integer的超类而且这个方法也接受Integer个对象。 因此,编译器无需将Integer取消装箱到int

答案 1 :(得分:0)

编译器首先选择最接近的匹配而不进行自动装箱/取消装箱。它找到了go(Number)并且没有使用拆箱。