java - java中的可变参数

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

我怀疑为什么编译器没有显示任何错误,因为 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/

相关文章:

java - 如何迭代 cucumber 的特征文件

Java 印地语语言环境支持?

java - 尝试实例化 Hibernate 时出现 SQLException (UnsupportedOperationException)

java - 无法从 AsyncTask 填充 ListView

java - Kotlin:appendText 和关闭资源

java - 尝试在同一行上逐行打印多个二维数组

java - 在 glassfish 上 httpclient 到 spring mvc 的文件上传速度慢

java - Easymock 部分模拟(EasyMock ClassExtension),好还是坏?

java - 阻止java程序打开线程

java - 为什么在Java中不能用String存储密码,而在C语言中可以用String存储密码?