为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕盖茨4494581 2021-08-04 15:10:30
我有这样的方法。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 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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

所以 anObject...只是an的语法糖Object[]

因此,void method(int[] ...x){}在您的情况下,以一维数组为参数的方法应被视为void method(int[][] x){}以二维数组为参数

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


查看完整回答
反对 回复 2021-08-04
?
当年话下

TA贡献1890条经验 获得超9个赞

简单:因为类型Whatever ... varargs(几乎)与Whatever[] varargs. 期望编译器在调用方法的地方为您做一些魔术(例如为您创建所需的数组对象)。

换句话说:你声明了一个 int 可变参数数组,它本质上就是一个 int 数组数组。

除此之外:不要那样做。千万不能使用可变参数的数组。


查看完整回答
反对 回复 2021-08-04
  • 2 回答
  • 0 关注
  • 332 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信