Java 中的数组声明和初始化。当数组的下标索引的位置在其声明中发生更改时,数组的行为会有所不同

2022-09-01 06:49:39

以下是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[][]pqint

问题:为什么在此声明中将 被视为二维数组?qint []p, q[];


附加信息:

以下语法看起来很不稳定。

int []a[];

但是,这符合规定,并且只是表现得像 或 。int a[][];int [][]a;

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

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

答案 1

看看数组上的JLS

可以作为类型的一部分出现在声明的开头,也可以作为特定变量的声明符的一部分出现,或者两者兼而有之。[]

声明符中允许使用括号,以向 C 和 C++ 的传统致敬。但是,变量声明的一般规则允许在类型和声明符中都出现括号,以便局部变量声明:

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

等效于一系列声明:

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

例如:

int []p, q[];

只是

int[] p, q[]

这实际上是

int p[]; int q[][]

其余的都是相似的。


答案 2

声明变量的合理方法是

type name

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

int[] array

从不写入

int array[]

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