我在理解这段代码时遇到了问题:
int[] it = new int[][]{{1}}[0];
为什么它是可编译的,我怎么能理解这样的声明?
答案 0 :(得分:103)
你在这里做的是:
int[] it
(这是一维数组)[0]
new int[][]
1
因此,您创建了一个二维数组,您初始化该数组以包含一个包含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[][]
分配一个新的1x1 2D数组。 (only)元素设置为1。[0]
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}}