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

use*_*250 68 java arrays compilation

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

int[] it = new int[][]{{1}}[0];
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*old 103

你在这做的是:

  1. 声明一个新变量int[] it(这是一维数组)
  2. 从第一个元素中分配其值 [0]
  3. 二维数组 new int[][]
  4. 初始化为 {{1}}

因此,您创建一个二维数组,您初始化该数组以包含一个数组,该数组包含1并同时获取外部数组的第一个元素(包含一维数组1)并将其分配给您的变量.

  • 很棒的解释 (10认同)

chr*_*her 29

int[] it = new int[][]{{1}}[0];
Run Code Online (Sandbox Code Playgroud)

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

new int[][] 
Run Code Online (Sandbox Code Playgroud)

这是一个新的多维数组.

{{1}} 
Run Code Online (Sandbox Code Playgroud)

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

[0] = [1]
[1] = []
[2] = []
...
[N] = []
Run Code Online (Sandbox Code Playgroud)

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

int[] it = new int[] {1};
Run Code Online (Sandbox Code Playgroud)

  • 在发布时,我并没有真正看到任何其他解决这个问题的陈述. (4认同)

NPE*_*NPE 9

new int[][]{{1}}分配新的1x1 2D阵列.(only)元素设置为1.

[0]返回到第一基准(并且只有)行,它的类型的int[].

int[] it = ...声明一个变量,并与上述参考文献对其进行初始化.

最终结果相当于int[] it = new int[]{1}.


ast*_*eri 6

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

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

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

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

int[] it =:最后,在这里我们将检索到的一维数组存储在变量中.

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


Max*_*ann 6

我会试着把它分解

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
Run Code Online (Sandbox Code Playgroud)

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

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];
Run Code Online (Sandbox Code Playgroud)


Jer*_*vel 5

int[] it = new int[][]{{1}}[0];
Run Code Online (Sandbox Code Playgroud)

整数数组it分配如下:

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
Run Code Online (Sandbox Code Playgroud)