我对这段代码不太理解:
int[] it = new int[][]{{1}}[0];
为什么它可以编译,我该如何理解这样的声明?我对这段代码不太理解:
int[] it = new int[][]{{1}}[0];
为什么它可以编译,我该如何理解这样的声明?int[] it
(它是一个一维数组)new int[][]
的第一个元素 [0]
{{1}}
1
的数组,并同时取出外部数组(一个包含 1
的一维数组)的第一个元素并将其赋值给你的变量。{{1}}
只是将单个 1
放入了一个多维数组中。这样的声明有什么用处或者可能会起到什么作用呢? - theGreenCabbageint[] it = new int[][]{{1}}[0];
让我们将其分解为每个阶段,并了解其含义。
new int[][]
这是一个新的多维数组。
{{1}}
这是一个多维数组字面值。它创建一个看起来像这样的数组:
[0] = [1]
[1] = []
[2] = []
...
[N] = []
注意,这个数组内的每个元素都是一个数组。然后你指定你的变量 it
等于多维数组中的第一个数组,所以它直接等同于:
int[] it = new int[] {1};
{{1}}
[…] 使数组看起来像这样:[…] [10] = []
" 这部分是误导性的:因为外部数组只有大小为1,所以没有 [10]
这样的东西,所以唯一的元素在索引0处(并包含另一个大小为1的整数1的数组,正如您正确陈述的那样)。虽然我已经在吹毛求疵了,但我认为您忘记更新最后一行了(应该是 {1}
,而不是 {0}
)。最后一个注意事项,只是为了好玩:你甚至可以将这一行缩短到 int[] it = {1};
(这仅适用于声明数组变量,在所有其他情况下,您都需要使用 new int[]{…}
)。 - siegi{1}
的批评是有效的。我使用0-10
试图说明其余部分为空...我已经做到了。干杯。 - christophernew int[][]{{1}}
分配了一个新的 1x1 的二维数组,其中(唯一的)元素被设置为 1。
[0]
返回对第一行(也是唯一的行)的引用,其类型为 int[]
。
int[] it = ...
声明一个变量并使用上述引用进行初始化。int[] it = new int[]{1}
。我会尝试将其分解
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];
new int [] [] {{1}}
),然后将该二维数组的第一个元素({1}
)赋值给变量 it
。new int [] [] {{1}}
:这将创建一个仅具有一个元素的二维数组:一个包含一个数组的数组,该数组包含一个 int
(数字1)。由于它在任何地方都没有被分配给变量,并且在此语句之后将无法访问,因此我们称其为“匿名”,并且它具有最小的范围。
[0]
:这将访问我们上面创建的匿名二维数组的第一个元素。第一个元素是一个包含1的单维数组(即 {1}
)。
int [] it =
:最后,在这里,我们将获取的单维数组存储在我们的变量中。int[] it = new int[][]{{1}}[0];
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
int[] it = new int[][]{{1, 2}, {3, 4}}[0];
这不是很常见,但也不是最难懂的代码。 - Jeroen Vannevel