use*_*250 68 java arrays compilation
我在理解这段代码时遇到了问题:
int[] it = new int[][]{{1}}[0];
Run Code Online (Sandbox Code Playgroud)
为什么它是可编译的,我怎么能理解这样的声明?
Ada*_*old 103
你在这做的是:
int[] it(这是一维数组)[0]new int[][]{{1}}因此,您创建一个二维数组,您初始化该数组以包含一个数组,该数组包含1并同时获取外部数组的第一个元素(包含一维数组1)并将其分配给您的变量.
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)
在new int[][]{{1}}分配新的1x1 2D阵列.(only)元素设置为1.
在[0]返回到第一基准(并且只有)行,它的类型的int[].
该int[] it = ...声明一个变量,并与上述参考文献对其进行初始化.
最终结果相当于int[] it = new int[]{1}.
基本上,您正在创建一个匿名的二维数组(new int[][]{{1}}),然后获取该二维数组()的第一个元素{1}并将其分配给变量it.
让我们一步一步走,因为这实际上有点令人困惑.
new int[][]{{1}}:这会创建一个只有一个元素的二维数组:一个数组,其中包含一个数组,其中包含一个数组int(数字1).因为它没有在任何地方分配给变量而且在此语句之后无法访问,所以我们将其称为"匿名",并且它具有尽可能小的范围.
[0]:这将访问我们在上面创建的匿名二维数组的第一个元素.第一个元素是包含1(即)的一维数组{1}.
int[] it =:最后,在这里我们将检索到的一维数组存储在变量中.
作为旁注,绝对没有理由这样做,它似乎只是一个非常有趣的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
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)
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)