【问题标题】:Weird declaration in java [duplicate]java中的奇怪声明[重复]
【发布时间】:2012-10-25 17:25:24
【问题描述】:

可能重复:
Arrays with trailing commas inside an array initializer in Java

为什么下面的说法在java中是正确的:

int[][] a = { {1,2,}, {3,4}};

是否应该因为不必要的逗号而导致编译错误?

【问题讨论】:

  • 你看到的编译错误是什么?这是有效的java。
  • 我相信问题是关于第一个子数组中的尾随逗号。
  • int[][] a = { { 1, 2, }, { 3, 4, }, };

标签: java arrays multidimensional-array declaration


【解决方案1】:

Trailing comma 在像 ignored by compiler 这样的数组初始化中。这些通常是添加的,以便稍后在数组中添加一些内容,只需要添加元素而无需担心逗号。

这很奇怪,但是是允许的。

这也列在JLS - Section#10.6 (Array Initializers):-

数组初始值设定项以逗号分隔的列表形式写入 表达式,用大括号 { 和 } 括起来。

一个尾随逗号可能出现在数组中的最后一个表达式之后 初始化器并被忽略。

【讨论】:

  • +1 我只是在 JLS 中查找参考资料,但你打败了我。 :)
  • @GregHewgill.. 干杯:)
【解决方案2】:
{1,2,}

最后一个逗号后不必有元素。这适用于几种编程语言(JavaScript (by standards; IE 并不总是符合)、PHP、Java、Python、C# 3.5 等,我敢肯定)。 p>

【讨论】:

  • Yes 和 c - 它们都继承了它们的语法。
  • @Eric: JavaScript not 允许尾随逗号;尽管许多浏览器都接受它,但 IE 不接受。
  • @GregHewgill C 确实允许使用尾随逗号,实际上:codepad.org/X7RyANgi。不过,关于 IE 的注意事项很好,我会添加它。
  • @GregHewgill 我不同意,它在 ANSI 标准中。 flash-gordon.me.uk/ansi.c.txtinitializer: assignment-expression { initializer-list } { initializer-list , }
  • @GregHewgill 更好的链接:eli-project.sourceforge.net/c_html/c.html#s6.5.7
【解决方案3】:

这个问题很可能是关于二维数组的第一个数组元素中的尾随逗号:{1,2,}。根据Java language spec,这是有效的java语法:

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

【讨论】:

    【解决方案4】:

    没有。它是一个多维数组。对于标准数组,您将拥有

    int a[] = {1, 2, 3};
    

    但这是多维的。也许这会有所帮助:

    int a[][] = {
                    {1, 2},
                    {3, 4}
                }
    

    所以现在a[0] = {1, 2} 和a[1] = {3, 4}

    如果您指的是 {1, 2,} 中的最后一个逗号,那么在 Java 中没问题。

    【讨论】:

    • 他在询问(1,2,) 中的尾随逗号和行分隔符
    【解决方案5】:

    它是一个嵌套数组 - 为什么会出现编译错误?

    【讨论】:

    • 我知道,但奇怪的是编译没有错误恕我直言
    • @przemek 您可以用逗号终止数组的最后一个元素。这不是语法错误。例如这也是一个有效的声明int[][] a = { {1,2,}, {3,4,},};
    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多