Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 varags方法(int[]…x)接受这一点;新国际标准[1][1]”;参数的2d数组类型?_Java_Arrays_Compilation_Variadic Functions - Fatal编程技术网

为什么Java varags方法(int[]…x)接受这一点;新国际标准[1][1]”;参数的2d数组类型?

为什么Java varags方法(int[]…x)接受这一点;新国际标准[1][1]”;参数的2d数组类型?,java,arrays,compilation,variadic-functions,Java,Arrays,Compilation,Variadic Functions,我有这样的方法 void method(int[] ...x){} 我使用方法调用方法(新的int[]{1,2,3,4}) 没关系。但编译器也编译这种2d数组类型 method(new int[][]{new int[]{1,2,3},new int[]{4,5,6}}); 我想知道原因。 方法具有1d数组类型引用。但编译器接受2d数组类型 变量方法函数(Object…args)的基本类型是函数(Object[]args) 因此,对象…只是对象[]的一种语法糖 因此,在使用1D数组作为参数的

我有这样的方法

void method(int[] ...x){}
我使用
方法调用方法(新的int[]{1,2,3,4})
没关系。但编译器也编译这种2d数组类型

method(new int[][]{new int[]{1,2,3},new int[]{4,5,6}});
我想知道原因。 方法具有1d数组类型引用。但编译器接受2d数组类型

变量方法
函数(Object…args)
的基本类型是
函数(Object[]args)

因此,
对象…
只是
对象[]
的一种语法糖

因此,在使用1D数组作为参数的情况下,方法
void方法(int[]…x){}
应被读取为使用2D数组作为参数的
void方法(int[]]x){}


因此它可以编译并且不会给出运行时错误。

简单:因为类型
无论什么。。。varargs
几乎与
任何内容相同[]varargs
。在调用该方法的地方(比如为您创建所需的数组对象),编译器会为您发挥一些魔力

换句话说:您声明了一个int的varargs数组,它本质上只是一个int数组


除此之外:不要那样做。不要使用varargs数组。

方法是1d类型。参数是2d类型。但科米勒接受了这一点。这种行为是意料之中的。您熟悉
符号吗?你认为它有什么作用?为什么您认为您的第一个代码不应该工作(或者您希望它如何工作)?@UdeeshaInduwara检查我的答案。希望这能解释原因,并记录在案:你仍然可以接受答案,即使是封闭式问题;-)