为什么Java varags method(int [] ... x)接受此“ new int [1] [1]”二维数组类型作为参数?

Ude*_*ara 2 java arrays compilation variadic-functions

我有这样的方法。

void method(int[] ...x){}
Run Code Online (Sandbox Code Playgroud)

并且我可以使用method(new int[]{1,2,3,4}); 它来调用方法。但是编译器也会编译此2d数组类型。

method(new int[][]{new int[]{1,2,3},new int[]{4,5,6}});
Run Code Online (Sandbox Code Playgroud)

我想知道原因。 方法具有一维数组类型引用。但是编译器接受二维数组类型。

Ash*_*ngh 5

可变参数方法的基本类型function(Object... args)function(Object[] args)

因此,an Object...只是一个语法糖Object[]

因此,void method(int[] ...x){}以您的情况为例,以1D数组为参数的方法应被理解为void method(int[][] x){}以2D数组为参数。

因此,它将编译并且也不会给出运行时错误。