SCJP问题:方法含糊不清

时间:2010-03-07 17:03:40

标签: java scjp

看看这段代码:

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)");
}

}

编译器发出调用错误的错误:

  

描述资源路径位置类型   方法flipFlop(String,int,Integer)对于Test Test.java scjp19类型是不明确的 - inheritence / src第3行Java问题

但是如果使用注释掉的行调用触发器,则会明确地调用该方法(第二个,因为在使用基元本身之后会进行自动装箱)。

我希望编译器看到第二个参数将以某种方式取消装箱,并根据第三个参数判断必须调用哪个方法。为什么不这样呢?理由是什么?

4 个答案:

答案 0 :(得分:6)

评论专线完全匹配flipFlop(String str, int i, int j)。另一行因为自动装箱而匹配。

答案 1 :(得分:1)

flipFlop(“hello”,new Integer(4),2004); 与...不相容 flipFlop(String str,int i,Integer iRef)

答案 2 :(得分:0)

Java 5及更高版本执行自动装箱(将Integer转换为int),从而得到结果。

答案 3 :(得分:-1)

是的,acc to ques,调用应该取决于int / Integer @ 3rd参数之间的差异。 但是如果第二个arg是autoUnboxed,那么即使差异@ 3rd参数也很重要。

即使这确实有效: flipFlop(“hex”,new Integer(4),new Integer(17));

虽然符合syntex和自动框功能,但这应该调用:: “private static void flipFlop(String str,int i,Integer iRef)”方法,但所有它说的都是AMBIGUOUS ..... ??