Почему объявления массивов Java используют фигурные скобки? - PullRequest
5 голосов
/ 14 марта 2011

Я хотел бы знать, почему в объявлениях массивов Java используются фигурные скобки, а не стандартные скобки.Как показано здесь.Я полагаю, что это может потребовать дальнейшего понимания фигурных скобок в целом, но это конкретно входит в мою повестку дня прямо сейчас.

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

Это правильно, в отличие от.

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

Ответы [ 3 ]

12 голосов
/ 14 марта 2011

В фигурных скобках обычно обозначаются множества и ансамбли, в то время как круглые скобки обычно обозначают параметры в языках, подобных С.

Давным-давно люди привыкли иметь такого рода соглашение с C .Я почти уверен, что в Java это работает так, чтобы поддерживать некоторую согласованность синтаксиса со старыми языками.

7 голосов
/ 14 марта 2011

Я не могу сказать , почему Джеймс Гослинг и др. Выбрали именно эту альтернативу ...

Однако использование круглых скобок вместо фигурных скобок создаст серьезную проблему неоднозначности для грамматики 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?
1 голос
/ 14 марта 2011

В большинстве языков программирования на основе Algol, которые являются наиболее широко используемыми языками, массивы объявляются с помощью фигурных скобок.

...