我想知道为什么 Java 数组声明使用大括号而不是标准括号。如此处所示。我想这可能需要进一步理解大括号,但这特别是我现在的议程。
Object[] tableHeaders = {"Cars","Trucks","Tacos"};
这是正确的,相反。
Object[] tableHeaders = ("Cars","Trucks","Tacos");
我想知道为什么 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 的编程语言(使用最广泛的语言)中,数组是使用花括号声明的。