java中的变量参数

cod*_*r25 5 java

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)导致歧义

当我编写代码时,我将输出作为广告而不是为什么?

Tim*_*Tim 3

Java 语言规范定义应该调用第一个方法(“a”)(而不是“b”)。

请参阅http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.12.2

为了保持与以前的 Java 版本(在引入 varargs 之前)的向后兼容性,编译器将始终选择具有确切参数数量的方法,即使也存在 varargs 方法。

至于您是否收到警告,编译器可以自由添加额外的警告,并且可能有一些警告确实会警告这种情况,我想您的不会(至少不会使用您的设置)