int[]x[]在Java中如何成为合法的数组声明?

int[]x[]在Java中如何成为合法的数组声明?,java,arrays,Java,Arrays,我知道 int[] []x[]; 类似的声明一个数组非常好,但是括号中的3个集合是如何工作的呢?下面是一个例子: int[] x; int x[]; int []x; 上面我们有一个二维数组。实际上,这是一个数组的数组。那么就这样宣布吧: int[][] array = new int[1][2]; 您仍然在声明一个数组数组,也称为二维数组。这意味着: int[] array[] = new int[1][2]; 与此相同: int[] []array[] = new int[1][2]

我知道

int[] []x[];
类似的声明一个数组非常好,但是括号中的3个集合是如何工作的呢?

下面是一个例子:

int[] x;
int x[];
int []x;
上面我们有一个二维数组。实际上,这是一个数组的数组。那么就这样宣布吧:

int[][] array = new int[1][2];
您仍然在声明一个数组数组,也称为二维数组。这意味着:

int[] array[] = new int[1][2];
与此相同:

int[] []array[] = new int[1][2][3];
因为数组标识符(‘array’)后面的括号是为C程序员改编的,所以它们被视为位于标识符之前

希望这有帮助!:)

下面是一个例子:

int[] x;
int x[];
int []x;
上面我们有一个二维数组。实际上,这是一个数组的数组。那么就这样宣布吧:

int[][] array = new int[1][2];
您仍然在声明一个数组数组,也称为二维数组。这意味着:

int[] array[] = new int[1][2];
与此相同:

int[] []array[] = new int[1][2][3];
因为数组标识符(‘array’)后面的括号是为C程序员改编的,所以它们被视为位于标识符之前


希望这有帮助!:)

尽管下面的3个表示相同,但推荐使用第一个,因为
x
的类型是一个整数数组

int[][][] array = new int[1][2][3];
所以,另一个应该是:

int[] x;   // Recommended
int x[];
int []x;
这是一个整数数组的数组

int[][][] array = new int[1][2][3];
根据其使用方式,可以将其视为三维阵列,例如,请参见


当然,实际上,Java没有多维数组。如前所述,它是整数数组的数组,每个子数组可能有不同的长度。但是这是一个较长的主题。

尽管下面的3个表示相同的意思,但是第一个是推荐的,因为
x
的类型是一个整数数组

int[][][] array = new int[1][2][3];
所以,另一个应该是:

int[] x;   // Recommended
int x[];
int []x;
这是一个整数数组的数组

int[][][] array = new int[1][2][3];
根据其使用方式,可以将其视为三维阵列,例如,请参见

当然,实际上,Java没有多维数组。如前所述,它是整数数组的数组,每个子数组可能有不同的长度。但这是一个较长的话题。

它是合法的,因为它允许:

变量的数组类型取决于括号对,括号对可能作为变量声明开始时类型的一部分出现,或作为变量声明符的一部分出现,或两者都出现

(强调矿山)

简单地说就是
int[]x[]
int[]]x相同


通常,我们应该避免混合放置
[]
(甚至在变量名之后放置
[]
)。在我看来,这是因为在Java中,我们习惯于将变量声明为

int[][][] x;
而不是

FullTypeDescription variableName 
int[][] a, b[];
数组的数量和维度是类型信息的一部分,所以应该将它们分开

<>混合类型允许我们编写代码(让C或C++程序员迁移到java更容易):

而不是

FullTypeDescription variableName 
int[][] a, b[];
但最后一种方式还是首选。

它是合法的,因为它允许:

变量的数组类型取决于括号对,括号对可能作为变量声明开始时类型的一部分出现,或作为变量声明符的一部分出现,或两者都出现

(强调矿山)

简单地说就是
int[]x[]
int[]]x相同


通常,我们应该避免混合放置
[]
(甚至在变量名之后放置
[]
)。在我看来,这是因为在Java中,我们习惯于将变量声明为

int[][][] x;
而不是

FullTypeDescription variableName 
int[][] a, b[];
数组的数量和维度是类型信息的一部分,所以应该将它们分开

<>混合类型允许我们编写代码(让C或C++程序员迁移到java更容易):

而不是

FullTypeDescription variableName 
int[][] a, b[];

但最后一种方法还是可取的。

我未受过教育的猜测是声明一个由整数的二维数组组成的数组。任何人都不应该编写这种不可读的代码。我会说int x[];最不奇怪了。@duffymo推荐的方法是
int[][]x
谢谢你的更正。我没有受过教育的猜测是声明一个int的二维数组。任何人都不应该编写这样不可读的代码。我会说int x[];最不奇怪了。@duffymo推荐的方法是
int[][]x
谢谢您的更正。为什么推荐?为什么程序员在变量之后立即放置数组括号是有原因的?请参阅,在这里,它声明“在声明符中允许括号作为C和C++传统的点头”。正如我在回答中所说,
[]
使类型成为数组,因此将其与数组基类型(
int
)放在一起是有意义的,例如,
int[]x
int[]
类型的变量
x
。JLS部分还指出,“我们不建议在数组变量声明中使用“混合表示法”,其中括号出现在类型声明符和声明符中”,这就是OP所做的。为什么建议这样做?为什么程序员在变量之后立即放置数组括号是有原因的?请参阅,在这里,它声明“在声明符中允许括号作为C和C++传统的点头”。正如我在回答中所说,
[]
使类型成为数组,因此将其与数组基类型(
int
)放在一起是有意义的,例如,
int[]x
int[]
类型的变量
x
。JLS部分还声明“我们不建议在数组变量声明中使用“混合表示法”,其中括号出现在类型和声明器中”,OP就是这么做的。再往下一点,链接的JLS说“我们不建议使用”混合表示法“在数组变量声明中,括号同时出现在类型声明符和声明符中”,因此它们实际上不鼓励同时使用
int[]]x[]
int[]]a,b[]
。再往下一点,链接的JLS说“我们不建议在数组变量声明中使用“混合表示法”,其中