为什么带有一个参数的方法重载了任意数量的参数版本编译

时间:2013-02-11 09:18:37

标签: java

为什么在编译时不会将此声明视为含糊不清?

void f(int a) {
    System.out.println("int");
}
void f(int... a) {
    System.out.println("int...");
}

e.g:

f(2);     // to one parameter both method should match (f(int) runs)
f(2,2);   // f(int...)

2 个答案:

答案 0 :(得分:3)

我认为幕后的var-args声明实际上是由编译器转换成数组的。所以var-args作为参数的方法实际上如下所示:

void f(int[] a) {
    System.out.println("int...");
}

答案 1 :(得分:0)

void f(int... a) {
System.out.println("int...");

}

上述方法可以接受一个或多个值,并且该方法只包含一个参数,即

void f(int a) {
System.out.println("int");

} 也可以接受一个值。