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

Tin*_*iny 22 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");
    }
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

输出:

1        2        
3        4        
5        6     
Run Code Online (Sandbox Code Playgroud)

通过上述讨论,对于一维数组也是合法的.

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");
}
Run Code Online (Sandbox Code Playgroud)

输出:

1        2        3        4        5        6
Run Code Online (Sandbox Code Playgroud)

即使以下是合法的语法,编译也很好.

int c[][] = {{,} ,{,} , {,},}; 
Run Code Online (Sandbox Code Playgroud)

编译器应该在逗号之前和之前期望一个常量值(或另一个初始化器),.这是怎么编的?编译器是否只是忽略这样的逗号或在这种情况下发生的其他事情?

Mar*_*ers 30

尾随逗号被忽略.从Java规范:

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

  • 附带说明:即使在JLS 1.0 http://titanium.cs.berkeley.edu/doc/java-langspec-1.0/(回到Java 1.0)中,也存在上述声明,因此我们可以放心地说“永远在那里”。 (2认同)