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

Cla*_*let 1 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)));
  }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这个程序打印"Pm(Object)"而不是"Pm(int)".

Era*_*ran 7

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

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