二维数组初始值设定项,后跟方括号

我有一个理解这段代码的问题:

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

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

你在这里做的是:

  1. 声明一个新的variablesint[] it (这是一维数组)
  2. 要成为第一个元素[0]
  3. 二维数组的new int[][]
  4. 初始化为{{1}}

因此,您创build一个二维数组,您将初始化为包含1的数组,并且同时获取外部数组(包含1的1维数组)的第一个元素并将其分配给您的variables。

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

让我们把这个分解成每个阶段,它是什么意思。

 new int[][] 

这是一个新的multidimensional array。

 {{1}} 

这是一个multidimensional array文字。 它使得一个数组看起来像这样:

 [0] = [1] [1] = [] [2] = [] ... [10] = [] 

所以要注意,这个数组里的每个元素本身就是一个数组。 那么你已经指定了你的variablesit等于multidimensional array中的第一个数组,所以它直接等于:

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

new int[][]{{1}}分配一个新的1×1二维数组。 (唯一)元素设置为1。

[0]返回对第一个(也是唯一)行的引用,它是int[]types的行。

int[] it = ...声明一个variables,并用上面的引用对它进行初始化。

最终结果等同于int[] it = new int[]{1}

本质上,你正在创build一个匿名的二维数组( new int[][]{{1}} ),然后获取该二维数组( {1} )的第一个元素并将其分配给variablesit

让我们一步一步来,因为这实际上是有点混乱。

new int[][]{{1}} :这将创build一个只有一个元素的二维数组:一个数组,其中包含一个数组,其中包含一个int (数字1)。 因为它没有被分配给任何地方的variables,并且不能通过这个语句访问,所以我们称之为“匿名”,并且它的可能范围最小。

[0] :这将访问我们上面创build的匿名二维数组的第一个元素。 第一个元素是一个包含1(即{1} )的维数组。

int[] it = :最后,在这里,我们将获取的一维数组存储在我们的variables中。

作为一个侧面说明,绝对没有理由这样做,它似乎只是一个非常有趣的Java难题。

我会尽力把它打破

 new int[][] // an array of arrays (or 2-dimensional array) {1} // an array instance with a single element: 1 {{1}} // an array instance with a single element: above array instance [0] // the first element of an array 

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

 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]; 
 int[] it = new int[][]{{1}}[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