猿问

为什么 Java varags method(int[] …x)

我有这样的方法。

void method(int[] ...x){}

我用method(new int[]{1,2,3,4}); 它调用方法没问题。但是编译器也会编译这个二维数组类型。

method(new int[][]{new int[]{1,2,3},new int[]{4,5,6}});

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


慕盖茨4494581
浏览 333回答 2
2回答

慕田峪7331174

可变参数方法的基础类型function(Object... args)是function(Object[] args)所以 anObject...只是an的语法糖Object[]。因此,void method(int[] ...x){}在您的情况下,以一维数组为参数的方法应被视为void method(int[][] x){}以二维数组为参数因此它编译并且也不会给出运行时错误。

当年话下

简单:因为类型Whatever ... varargs(几乎)与Whatever[] varargs. 期望编译器在调用方法的地方为您做一些魔术(例如为您创建所需的数组对象)。换句话说:你声明了一个 int 可变参数数组,它本质上就是一个 int 数组数组。除此之外:不要那样做。千万不能使用可变参数的数组。
随时随地看视频慕课网APP

相关分类

Java
我要回答