看一下这段代码:
public class Test {
public static void main(String... args) {
flipFlop("hello", new Integer(4), 2004);
// flipFlop("hello", 10, 2004); // this works!
}
private static void flipFlop(String str, int i, Integer iRef) {
System.out.println(str + " (String, int, Integer)");
}
private static void flipFlop(String str, int i, int j) {
System.out.println(str + " (String, int, int)");
}
}
编译器报错,调用不明确:
但是,如果使用被注释掉的行来调用flip-flop方法,则可以明确地调用该方法(第二个方法,因为自动装箱在使用原始类型后进行)。描述 资源 路径 位置 类型 方法flipFlop(String, int, Integer)对于类型Test是不明确的 Test.java scjp19 - inheritence/src 第3行 Java问题
我期望编译器能够看到第二个参数将以某种方式取消装箱,并根据第三个参数判断必须调用哪个方法。为什么这种情况没有发生?这是什么原理?