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));
}
}
我怀疑为什么编译器没有显示任何错误,因为 doit(4,5) 导致歧义
当我运行代码时,我得到的输出是广告而不是 b 为什么?
最佳答案
Java 语言规范定义应调用第一个方法(“a”)(而不是“b”)。
参见 http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.12.2
为了保持与以前的 Java 版本(在引入可变参数之前)的向后兼容性,编译器将始终选择具有确切参数数量的方法,即使可变参数方法也存在。
至于你是否收到警告,编译器可以自由添加额外的警告,并且可能会有一些警告这种情况,我猜你的没有(至少没有你的设置)
关于java - java中的可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9581711/