看看这段代码:
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问题
但是如果使用注释掉的行调用触发器,则会明确地调用该方法(第二个,因为在使用基元本身之后会进行自动装箱)。
我希望编译器看到第二个参数将以某种方式取消装箱,并根据第三个参数判断必须调用哪个方法。为什么不这样呢?理由是什么?
答案 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 ..... ??