我有这样的方法。void method(int[] ...x){}我用method(new int[]{1,2,3,4}); 它调用方法没问题。但是编译器也会编译这个二维数组类型。method(new int[][]{new int[]{1,2,3},new int[]{4,5,6}});我想知道原因。 方法具有一维数组类型引用。但编译器接受二维数组类型。
2 回答
![?](http://img1.sycdn.imooc.com/545847aa0001063202200220-100-100.jpg)
慕田峪7331174
TA贡献1828条经验 获得超13个赞
可变参数方法的基础类型
function(Object... args)
是function(Object[] args)
所以 anObject...
只是an的语法糖Object[]
。
因此,void method(int[] ...x){}
在您的情况下,以一维数组为参数的方法应被视为void method(int[][] x){}
以二维数组为参数
因此它编译并且也不会给出运行时错误。
![?](http://img1.sycdn.imooc.com/545868190001d52602200220-100-100.jpg)
当年话下
TA贡献1890条经验 获得超9个赞
简单:因为类型Whatever ... varargs
(几乎)与Whatever[] varargs
. 期望编译器在调用方法的地方为您做一些魔术(例如为您创建所需的数组对象)。
换句话说:你声明了一个 int 可变参数数组,它本质上就是一个 int 数组数组。
除此之外:不要那样做。千万不能使用可变参数的数组。
添加回答
举报
0/150
提交
取消