Java中在数组初始值设定项中带有尾随逗号的数组

Java中在数组初始值设定项中带有尾随逗号的数组,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,数组初始值设定项可用于在编译时初始化数组。带有尾随逗号的初始值设定项(如下所示)编译良好 int a[][] = {{1,2,} ,{3,4,} , {5,6,},}; //Trailing commas cause no compiler error for(int i=0;i<a.length;i++) { for(int j=0;j<2;j++) { System.out.print(a[i][j]+"\t"); } Syste

数组初始值设定项可用于在编译时初始化数组。带有尾随逗号的初始值设定项(如下所示)编译良好

int a[][] = {{1,2,} ,{3,4,} , {5,6,},}; //Trailing commas cause no compiler error

for(int i=0;i<a.length;i++)
{
    for(int j=0;j<2;j++)
    {
        System.out.print(a[i][j]+"\t");
    }
    System.out.println();
}
int c[][] = {{,} ,{,} , {,},}; 

一维数组也是合法的,这一点在上面的讨论中显而易见

int[] b = {1, 2, 3, 4, 5, 6,}; //A trailing comma causes no compiler error

for(int i=0;i<b.length;i++)
{
    System.out.print(b[i]+"\t");
}

甚至下面的语法也是合法的,编译起来也很好

int a[][] = {{1,2,} ,{3,4,} , {5,6,},}; //Trailing commas cause no compiler error

for(int i=0;i<a.length;i++)
{
    for(int j=0;j<2;j++)
    {
        System.out.print(a[i][j]+"\t");
    }
    System.out.println();
}
int c[][] = {{,} ,{,} , {,},}; 

编译器应该期望在逗号
之后和之前有一个常量值(或另一个初始值设定项)。这是如何编译的?编译器只是忽略了这样的逗号,还是在这种情况下发生了其他事情?

后面的逗号被忽略。从:

尾随逗号可能出现在数组初始值设定项中的最后一个表达式之后,并被忽略


将忽略尾随逗号。从:

尾随逗号可能出现在数组初始值设定项中的最后一个表达式之后,并被忽略


将忽略尾随逗号。该语言允许使用它,因为有些人觉得它很方便。@Daniel Well在向数组添加内容时,它使diff更加简洁,允许数组表达式的轻松重新排序,并使该语言的语法更加简单。我看到了很多优点,但没有缺点。@Voo它是如何使语法更简单的呢?如果后面的逗号是必须的,那会使它更简单,但是如果有一个可选的后面逗号,我看不到它。我也看不到差异的更简洁。重新排序,是的。@Daniel对,你是关于语法的,我忘了它们仍然是可选的。关于差异:假设对于更大的数组,每个项都有自己的行(我看到,相对来说,虽然它并不总是明智的,但在很多情况下,它是有用的——也为注释留出了位置,而不必求助于/**/inline)。添加新行只会更改diff中的一行,如果没有新行,则必须更改两行。@Voo我明白了。但是如果你用Haskell风格的数组布局,加上前导逗号,它不会改变两行,除非你在第一个位置添加一个条目,但这比在末尾添加要难得多。后面的逗号会被忽略。该语言允许使用它,因为有些人觉得它很方便。@Daniel Well在向数组添加内容时,它使diff更加简洁,允许数组表达式的轻松重新排序,并使该语言的语法更加简单。我看到了很多优点,但没有缺点。@Voo它是如何使语法更简单的呢?如果后面的逗号是必须的,那会使它更简单,但是如果有一个可选的后面逗号,我看不到它。我也看不到差异的更简洁。重新排序,是的。@Daniel对,你是关于语法的,我忘了它们仍然是可选的。关于差异:假设对于更大的数组,每个项都有自己的行(我看到,相对来说,虽然它并不总是明智的,但在很多情况下,它是有用的——也为注释留出了位置,而不必求助于/**/inline)。添加新行只会更改diff中的一行,如果没有新行,则必须更改两行。@Voo我明白了。但是,如果您以Haskell样式布局数组,并使用前导逗号,它不会改变两行-除非您在第一个位置添加一个条目,但这比在末尾添加条目要难得多。作为旁注:即使在JLS 1.0(追溯到Java 1.0)中也存在上述语句,因此我们可以放心地说“它始终存在”。作为旁注:即使在JLS 1.0(追溯到Java 1.0)中也存在上述语句,因此我们可以放心地说“它一直存在”。