为什么不在此 java 代码中应用拆箱?
Why isn't unboxing applied in this java code?
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后来的版本引入了自动装箱和自动拆箱转换,设计人员不想中断工作代码。
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后来的版本引入了自动装箱和自动拆箱转换,设计人员不想中断工作代码。