为什么Java选择这种重载超过另一种

One*_*ree 0 java overload-resolution

任何人都可以向我解释为什么Java选择第二次重载而不是第一次?

public static void foo (int a, double b, double...c) {}
public static void foo (double...a) {}
public static void bar ()
{
    // this is the second
    foo(1);
}
Run Code Online (Sandbox Code Playgroud)

我认为当我1作为参数传递时,Java会选择第一个参数,因为int它更具体而不是double

谢谢

rge*_*man 5

第二种方法是唯一可以匹配的方法.你只有一个参数.第一个foo至少有两个必需:an int和a double,因此无法匹配.

第二个foo匹配因为任意数量的数字都可以匹配.Java将通过方法调用转换隐式地将您提升int 1到一个double可以匹配的位置.