class OverloadingVarargs2 {
static void f(float i, Character... args) {
System.out.println("first");
System.out.println(i);
}
static void f(Character... args) {
System.out.println("second");
}
static void test() {
f(1, 'a');
f('b', 'c'); // the method f is ambiguous
}
}
这段代码无法编译,编译器说f是不明确的。但我认为第二种方法可以匹配f('b', 'c');
问题是什么?
答案 0 :(得分:8)
这是因为无法确定该方法调用是应该调用带有变量args的方法还是带有float和variable args的方法调用。
Java决定用这种方式调用扩展>拳击>变量args,但是在这种情况下两者都有变量args。
在这种情况下,基本上char被扩展为浮动。
java原语的扩展顺序是:
byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double