public class Demo {
public static String doit(int x,int y)
{
return"a";
}
public static String doit(int ...val)
{
return "b";
}
public static void main(String args[])
{
System.out.println(doit(4,5));
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑为什么compilier没有显示任何错误,因为doit(4,5)导致歧义
当我编写代码时,我将输出作为广告而不是为什么?
Java 语言规范定义应该调用第一个方法(“a”)(而不是“b”)。
请参阅http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.12.2
为了保持与以前的 Java 版本(在引入 varargs 之前)的向后兼容性,编译器将始终选择具有确切参数数量的方法,即使也存在 varargs 方法。
至于您是否收到警告,编译器可以自由添加额外的警告,并且可能有一些警告确实会警告这种情况,我想您的不会(至少不会使用您的设置)