Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';java vararg数组参数和普通数组参数之间的区别是什么?_Java_Arrays_Parameters_Variadic Functions - Fatal编程技术网

什么';java vararg数组参数和普通数组参数之间的区别是什么?

什么';java vararg数组参数和普通数组参数之间的区别是什么?,java,arrays,parameters,variadic-functions,Java,Arrays,Parameters,Variadic Functions,有两种函数声明: void f(String ... s) { System.out.println(s.length); } void g(String [] s){ System.out.println(s.length); } 两者都可以,我猜“f()”只是g()语法的一种形式 当使用f()时,java编译器仍然会创建一个内部数组s,对还是错我检查了Intellij中的类文件,似乎f()的反汇编代码仍然是字符串。。。非字符串[] 你能帮我澄清一下吗?非常感谢。问:java

有两种函数声明:

void f(String ... s) {
    System.out.println(s.length);
}
void g(String [] s){
    System.out.println(s.length);
}
两者都可以,我猜“f()”只是g()语法的一种形式

当使用f()时,java编译器仍然会创建一个内部数组s,对还是错我检查了Intellij中的类文件,似乎f()的反汇编代码仍然是字符串。。。非字符串[]


你能帮我澄清一下吗?非常感谢。

问:java vararg数组参数和普通数组参数有什么区别?

final参数类型后的三个句点表示final参数可以作为数组或参数序列传递。Varargs只能在最终参数位置使用

Q:两者都可以,我猜“f()”只是g()的一种语法形式?

在一个数组中必须传递多个参数,这仍然是事实, 但是varargs特性会自动执行并隐藏该过程

Q:当使用f()时,java编译器仍然会创建一个内部数组s,对还是错我检查了Intellij中的类文件,似乎f()的反汇编代码仍然是字符串。。。非字符串[]

它作为数组处理,请参见

此外,我完全支持参考文件的最后陈述:

那么什么时候应该使用varargs呢?作为客户,你应该利用 无论API何时提供它们,都会提供它们。核心API的重要用途 包括反射、消息格式和新的printf功能。 作为API设计器,只有在 好处确实令人信服。一般来说,你不应该 重载varargs方法,否则程序员很难 找出调用哪个重载


一个区别是
f(“foo”,“bar”)编译,但
g(“foo”,“bar”)不显示