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

时间:2018-08-21 09:31:35

标签: java arrays compilation variadic-functions

我有这样的方法。

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

然后我使用method(new int[]{1,2,3,4});调用方法 没关系。但是编译器也会编译这种2d数组类型。

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

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

2 个答案:

答案 0 :(得分:5)

  

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

因此Object...只是Object[]的语法糖。

因此,在您使用1D数组作为参数的情况下,方法void method(int[] ...x){}应该读为以2D数组作为参数的void method(int[][] x){}

因此它可以编译,也不会出现运行时错误。

答案 1 :(得分:3)

简单:因为类型Whatever[] varargs<?xml version="1.0" encoding="utf_8"?> <available_technologies> <available_technology> <Opportunity_type> <item><value>Licensing</value></item> <item><value>Distribution</value></item> </Opportunity_type> </available_technology> enter code here </available_technologies> 几乎相同。期望编译器在调用该方法的地方为您做一些魔术(例如为您创建所需的数组对象)。

换句话说:您声明了一个int的varargs数组,从本质上讲,它不过是一个int的数组。

除此之外:请勿这样做。 不要使用可变参数数组。