有人可以向我解释为什么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会选择第一个参数,因为int
比double
更具体?
由于
答案 0 :(得分:5)
第二种方法是唯一可以匹配的方法。你只有一个参数。第一个foo
至少需要两个:int
和double
,因此无法匹配。
第二个foo
匹配,因为任意数量的数字都可以匹配。 Java会隐式地将您的int
1
提升为double
,以便与方法调用转换匹配。