Java中的数组声明和初始化 当下标指数的位置在声明中发生变化时,数组的行为会有所不同

以下是Java中明显而通常的数组声明和初始化。

int r[], s[]; //<------- r=new int[10]; s=new int[10]; 

在声明语句中更改[]的位置时,类似的情况会有所不同,如下所示。

 int []p, q[]; //<------- p=new int[10]; q=new int[10][10]; 

请看宣言。 []的位置已经从r[]更改为[]p 。 在这种情况下,数组q行为类似于inttypes的数组(与之前的情况完全不同)。

问题:为什么q ,在这个声明中int []p, q[]; 视为一个二维数组?


附加信息:

以下语法看起来不可思议。

 int []a[]; 

然而,这符合罚款,只是行为像int a[][]; 或者int [][]a;

因此,以下情况都是有效的。

 int [][]e[][][]; int [][][][][]f[][][][]; 

看arrays上的JLS :

[]可以作为声明开头的types的一部分出现,也可以作为特定variables声明的一部分出现。

在C和C ++的传统中,允许在声明符中使用括号。 然而,variables声明的一般规则允许括号出现在types和声明符中,以便局部variables声明:

 float[][] f[][], g[][][], h[]; // Yechh! 

相当于一系列的声明:

 float[][][][] f; float[][][][][] g; float[][][] h; 

举个例子:

 int []p, q[]; 

只是

 int[] p, q[] 

这实际上是

 int p[]; int q[][] 

其余的都是相似的。

声明variables的理智方式是

 type name 

所以如果type是int[] ,我们应该写

 int[] array 

永远不要写

 int array[] 

这是胡言乱语(虽然这是合法的)