为什么在这个java代码中没有应用拆箱?

时间:2016-06-08 10:30:27

标签: java unboxing

public class P {
  String m(int i) {
    return "P.m(int)";
  }

  String m(Object o) {
    return "P.m(Object)";
  }
}

public class Test {
  public static void main(String[] args) {
    P p = new P();
    System.out.println(p.m(Integer.valueOf(42)));
  }
}

我无法理解为什么这个程序打印“P.m(Object)”而不是“P.m(int)”。

1 个答案:

答案 0 :(得分:7)

Boxing和Unboxing转换仅应用于方法重载决策的第二阶段,而第二阶段仅在第一阶段未找到任何匹配候选时执行。在您的示例中,在第一阶段中找到String m(Object o),因此从不执行第二阶段。

第一阶段没有使用装箱和拆箱的原因是在更高版本的Java中引入了自动装箱和自动拆箱转换,设计人员不想破坏工作代码。