为什么Java数组声明使用大括号?

时间:2011-03-14 00:54:28

标签: java arrays declaration curly-braces

我想知道为什么Java数组声明使用大括号而不是标准括号。如图所示。我想这可能需要进一步理解大括号,但现在这个问题已经在我的议程上了。

Object[] tableHeaders = {"Cars","Trucks","Tacos"};

这是正确的,而不是。

Object[] tableHeaders = ("Cars","Trucks","Tacos");

3 个答案:

答案 0 :(得分:12)

括号通常表示集合和集合,而括号通常表示C语言中的参数。

很久以前,人们已经习惯了this kind of convention with C。我很确定它在Java中以这种方式工作,以保持与旧语言的某种语法一致性。

答案 1 :(得分:7)

我不能说为什么 James Gosling等人选择了这个特殊的选择......

但是,使用圆括号而不是大括号会给Java语法带来严重的歧义问题。请考虑以下示例:

Object[] tableHeaders = ("Cars");

圆括号是表示数组构造函数,还是它们是正常表达式表达式语法的一部分?

现在有可能提出一些复杂的优先规则来解决这个问题,但这会让程序员和编译器编写者都感到生活困难。

(在语法层面,Java解析器需要处理歧义:

VariableInitializer:
    ArrayInitializer
    Expression

在上面的示例中,("Cars")匹配ArrayInitializer和Expression产生...如果对数组初始值设定项使用圆括号。确定哪个是正确的含义需要查看声明的变量类型...然后对VariableInitializer进行上下文敏感的解析。讨厌。)

我会说他们在不使用圆括号进行数组初始化时做出了正确的选择。


方括号也不起作用。考虑尝试解释一下......

... = new Object[]["Cars"];  // 1-D array

... = new Object[21][];      // 2-D array

... = new Object[][];        // is that 1-D or 2-D?

答案 2 :(得分:1)

在大多数使用最广泛的基于Algol的编程语言中,使用花括号声明数组。