【发布时间】:2014-01-13 01:27:24
【问题描述】:
为什么这段代码会编译?
int[] array = new int[][]{{1}}[0];
左边是一维数组。右边我以为是三维的,但不是吗?
【问题讨论】:
标签: java arrays multidimensional-array
为什么这段代码会编译?
int[] array = new int[][]{{1}}[0];
左边是一维数组。右边我以为是三维的,但不是吗?
【问题讨论】:
标签: java arrays multidimensional-array
右边是一个一维数组,是二维数组的第一个(0th)元素
new int[][]{{1}}
为了更清楚地显示它,让我们添加括号
int[] array = (new int[][]{{1}}) [0];// [0] is returning first row of 2D array
// which is 1D array so it can be assigned to `array`
【讨论】:
int[][]{{1}} - 我看到两个方括号,所以我想是二维数组。为什么会这样?你能解释更多吗?
int array = new int[]{1, 2, 4} [0];。首先,数组是用三个元素创建的,我从中选择第一个元素。它只是 int。
new int[][]{{1}}(有或没有括号)是一个array creation expression,后面的[0]只是选择刚刚创建的数组的索引0处的元素。
右边的表达式做了两件事。
// instantiate new 2D array
// ┌──────┸───────┑ ┌ access zeroth element of new 2D array
// │ │ │
int[] array = new int[][]{{1}} [0];
这基本上等同于以下内容:
int[][] array2D = new int[1][1];
array2D[0][0] = 1;
int[] array = array2D[0];
【讨论】:
从内存管理的角度来看,二维数组与一维数组相同(意味着数据存储在一维中)。因此,二维数组的第一个元素与一维数组的第一个元素相同。
【讨论】:
int[][] array = new int[5][10] 会通过,int[] = new int[3][2] 不会。尺寸必须匹配,但在我的示例中,我认为不匹配。
int[] arrayX = new int[3][2]; 将无法编译,因为您正试图将二维整数数组传递给一维数组。