二维数组初始化器后跟方括号

时间:2013-12-04 14:26:37

标签: java arrays compilation

我在理解这段代码时遇到了问题:

int[] it = new int[][]{{1}}[0];

为什么它是可编译的,我怎么能理解这样的声明?

6 个答案:

答案 0 :(得分:103)

你在这里做的是:

  1. 声明一个新变量int[] it(这是一维数组)
  2. 从第一个元素[0]
  3. 中分配其值
  4. 的二维数组new int[][]
  5. 初始化为1
  6. 因此,您创建了一个二维数组,您初始化该数组以包含一个包含1的数组,同时您将获取外部数组的第一个元素(这是一个包含{{1}})的一维数组,并将其分配给您的变量。

答案 1 :(得分:29)

int[] it = new int[][]new int[][] 
[0];

让我们将这个分解为每个阶段,以及它意味着什么。

[0] = [1]
[1] = []
[2] = []
...
[N] = []
 

这是一个新的多维数组。

it

这是一个多维数组文字。它创建一个如下所示的数组:

int[] it = new int[] {1};

请注意,此数组中的每个元素本身就是一个数组。然后你已经指定你的变量{{1}}等于多维数组中的第一个数组,所以它直接等同于:

{{1}}

答案 2 :(得分:9)

new int[][][0]分配一个新的1x1 2D数组。 (only)元素设置为1。

int[]返回对第一个(也是唯一的)行的引用,该行的类型为int[] it = ...

int[] it = new int[]{1}声明一个变量并使用上面的引用初始化它。

最终结果相当于{{1}}。

答案 3 :(得分:6)

基本上,您正在创建一个匿名的二维数组(new int[][]{1}),然后获取该二维数组的第一个元素(it)并将其分配给变量{{1} }。

让我们一步一步走,因为这实际上有点令人困惑。

new int[][]int:这会创建一个只有一个元素的二维数组:一个数组,其中包含一个数组,其中包含一个[0](数字1)。因为它没有在任何地方分配给变量,并且在此语句之后无法访问,所以我们将其称为“匿名”,并且它具有可能的最小范围。

{1}:这将访问我们在上面创建的匿名二维数组的第一个元素。第一个元素是一个一个 - 维数组,其中包含1(即int[] it =)。

{{1}}:最后,我们在这里获取检索到的一维数组并将其存储在变量中。

作为旁注,绝对没有理由这样做,这似乎只是一个非常有趣的Java难题。

答案 4 :(得分:6)

我会尝试将其分解

new int[][] // an array of arrays (or 2-dimensional array)
{1} // an array instance with a single element: 1
int[] inner = new int[1]; // an empty array with length 1
inner[0] = 1;
int[][] outer = new int[1][];
outer[0] = inner;

int[] it = outer[0];
 // an array instance with a single element: above array instance
[0] // the first element of an array

所以它大致相当于以下代码:

{{1}}

答案 5 :(得分:5)

int[] it = new int[][]it[0];

为整数数组new int[][] // A new 2D array is created {{1}} // This is an initializer. The first array in the first array gets an array of 1 item: '1' [0] // Take the first array from the 2D array 分配以下内容:

{{1}}