2

好的,这是代码:

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

4

2 回答 2

0

Java 编译器在包装类的对象是以下情况时应用拆箱:

  • 作为参数传递给需要相应原始类型的值的方法。
  • 分配给相应原始类型的变量。

所以,因为有一个适合 Integer 类的方法,这是void go(Number n)因为Number类是超类,Integer并且该方法也接受Integer对象。所以编译器不需要拆箱Integerto int

于 2013-10-06T06:51:02.287 回答
0

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

于 2013-10-06T06:58:15.027 回答