gpt4 book ai didi

java - varargs 什么时候开始不与 no-arg 冲突?

转载 作者:行者123 更新时间:2023-11-30 11:01:25 24 4
gpt4 key购买 nike

今天我发现下面的代码编译运行没有任何警告:

public class Try_MultipleArguments2 {

public static void main(String[] args) {

myfunction();

myfunction(1, 2, 3);

}

public static void myfunction(int ... as) {
System.out.println("varags called");
}

public static void myfunction() {
System.out.println("noarg called");
}
}

我记得很清楚,不是那么早。

这是 JVM 更改还是我的内存故障???

它如何区分无参数和可变参数?

更新

下面的代码也运行正常:

public class Try_MultipleArguments2 {

public static void main(String[] args) {

myfunction();

myfunction(1, 2, 3);

}

public static void myfunction(int ... as) {
System.out.println("varags called");
}

// public static void myfunction() {
// System.out.println("noarg called");
// }
}

最佳答案

这些是重载方法。编译器知道编译后的 main 应该从方法签名中调用哪个方法。参见 this specification :

When a method is invoked (§15.12), the number of actual arguments (and any explicit type arguments) and the compile-time types of the arguments are used, at compile time, to determine the signature of the method that will be invoked (§15.12.2).

此外,所选择的方法是最具体的方法。参见 this .在这种情况下,无参数方法比可变参数版本更具体 - 再次检查参数数量以查看选择哪种方法。

关于java - varargs 什么时候开始不与 no-arg 冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31201196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com