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

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

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

这是正确的,而不是。

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

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

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

我不能说为什么 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? 

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