二维数组初始值设定项,后跟方括号
我有一个理解这段代码的问题:
int[] it = new int[][]{{1}}[0];
为什么它是可编译的,我怎么能理解这样一个声明?
你在这里做的是:
- 声明一个新的variables
int[] it
(这是一维数组) - 要成为第一个元素
[0]
- 二维数组的
new int[][]
- 初始化为
{{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