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

时间:2013-10-17 20:04:50

标签: 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);
}

我认为当我传递1作为参数时,Java会选择第一个参数,因为intdouble更具体?

由于

1 个答案:

答案 0 :(得分:5)

第二种方法是唯一可以匹配的方法。你只有一个参数。第一个foo至少需要两个:intdouble,因此无法匹配。

第二个foo匹配,因为任意数量的数字都可以匹配。 Java会隐式地将您的int 1提升为double,以便与方法调用转换匹配。