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

Tin*_*iny 35 java arrays

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

int r[], s[];       //<-------
r=new int[10];
s=new int[10];
Run Code Online (Sandbox Code Playgroud)

[]在声明语句中更改位置时,非常类似的情况表现不同,如下所示.

int []p, q[];       //<-------
p=new int[10];
q=new int[10][10];
Run Code Online (Sandbox Code Playgroud)

请看一下声明.位置[]已经从r[]变为[]p.在这种情况下,数组的q行为类似于类型数组int(这与前一种情况完全不同).

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


附加信息:

以下语法看起来很糟糕.

int []a[];
Run Code Online (Sandbox Code Playgroud)

然而,这符合罚款,只是表现得像int a[][];int [][]a;.

因此,以下案例都是有效的.

int [][]e[][][];
int [][][][][]f[][][][];
Run Code Online (Sandbox Code Playgroud)

zw3*_*324 43

看看阵列上的JLS:

[]可能显示为在声明的开头所述类型的部分,或作为说明符用于特定变量,或两者的一部分.

声明器中允许使用括号作为对C和C++传统的认可.但是,变量声明的一般规则允许括号出现在类型和声明符中,以便本地变量声明:

float[][] f[][], g[][][], h[];  // Yechh!
Run Code Online (Sandbox Code Playgroud)

相当于一系列声明:

float[][][][] f;
float[][][][][] g;
float[][][] h;
Run Code Online (Sandbox Code Playgroud)

例如:

int []p, q[];
Run Code Online (Sandbox Code Playgroud)

只是

int[] p, q[]
Run Code Online (Sandbox Code Playgroud)

事实上

int p[]; int q[][]
Run Code Online (Sandbox Code Playgroud)

其余的都很相似.

  • 奇怪的是`q`变成了二维数组. (2认同)

Zho*_*gYu 10

声明变量的理智方式是

type name
Run Code Online (Sandbox Code Playgroud)

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

int[] array
Run Code Online (Sandbox Code Playgroud)

永远不要写

int array[]
Run Code Online (Sandbox Code Playgroud)

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