varargs 什么时候开始不与 no-arg 冲突?
When varargs started to not conflict with no-arg?
今天我发现下面的代码编译运行没有任何警告:
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。在这种情况下,无参数方法比可变参数版本更具体 - 再次检查参数数量以查看选择哪种方法..
后端函数重载
您的 void myfunction(int ... as)
接受多个参数,而您的 void myfunction()
没有参数。我没有看到任何故障。 Method Overloading
今天我发现下面的代码编译运行没有任何警告:
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。在这种情况下,无参数方法比可变参数版本更具体 - 再次检查参数数量以查看选择哪种方法..
后端函数重载
您的 void myfunction(int ... as)
接受多个参数,而您的 void myfunction()
没有参数。我没有看到任何故障。 Method Overloading