Java 为什么一个参数重载的方法会编译任意数量的参数版本

Java 为什么一个参数重载的方法会编译任意数量的参数版本,java,Java,为什么这个声明在编译时不被认为是不明确的 void f(int a) { System.out.println("int"); } void f(int... a) { System.out.println("int..."); } e、 g: 我认为args声明的背后实际上是由编译器转换成一个数组。因此,使用var args作为参数的方法实际上如下所示: void f(int[] a) { System.out.println("int..."); } } 上述方法

为什么这个声明在编译时不被认为是不明确的

void f(int a) {
    System.out.println("int");
}
void f(int... a) {
    System.out.println("int...");
}
e、 g:


我认为args声明的背后实际上是由编译器转换成一个数组。因此,使用var args作为参数的方法实际上如下所示:

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

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

void f(int a) {
System.out.println("int");
}
也可以接受一个值。

如果存在类似void f(int[]a)的方法,该怎么办?@Juvanis,那么它将不会编译。@Juvanis如果您有一个数组为param的方法和另一个名称不同且变量args为param的方法,则这是一个编译器错误。不明确的方法是的,var args将从参数创建一个数组,但是这并不能解释只有一个参数且该方法只有一个参数版本时的特殊用例。哪种情况下,两个方法都可以接受该单个参数。@user1063963不太明白您的意思,您能详细说明一下吗,may b,用一个测试用例示例:)我现在没有时间找到它,但我打赌答案在某个地方。好吧,如果编译器能找到调用的精确匹配,它会这样做的,而且不适用于var参数,甚至不适用于装箱。
void f(int... a) {
System.out.println("int...");
void f(int a) {
System.out.println("int");