This question already has answers here:
Why does autoboxing make some calls ambiguous in Java?
(6个答案)
3年前关闭。
我不明白为什么该程序打印“ P.m(Object)”而不是“ P.m(int)”。
(6个答案)
3年前关闭。
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)”。
最佳答案
装箱和拆箱转换仅应用于方法重载解决方案的第二阶段,并且仅在第一阶段找不到任何匹配的候选者时才执行第二阶段。在您的示例中,在第一阶段找到了String m(Object o)
,因此从不执行第二阶段。
在第一阶段不使用装箱和拆箱的原因是,自动装箱和自动拆箱转换是在更高版本的Java中引入的,设计人员不想破坏正常工作的代码。
08-06 04:37