public class OverloadingVarargsMethodWithNormalMethod {
static void a(int... c){
System.out.println(c.length);
for(int array:c){
System.out.println(array);
}
}
static void a(int d,int e,int f){
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
public static void main(String[] args) {
a(1,2,3);
}
}
我预计会出现一个模棱两可的错误。但是,代码运行第二个“a”方法。为什么?两种方法适用于(1,2,3)?
答案 0 :(得分:3)
将调用最具体的函数定义。 int a, int b, int c
比int... c
更具体。
出于同样的原因,以下内容有效
static void foo(String a) {
}
static void foo(Object a) {
}
并且第一个将被调用foo("bar");
进一步阅读:https://blogs.oracle.com/mcimadamore/entry/testing_overload_resolution