2016-09-10 3 views
0
int[] arr = {1, 2, 3}; 

arr = {1, 2, 3} //Error 
arr = new int[] {1, 2, 3}; //No Error 

Так что мой вопрос: почему это так? Я имею в виду разницу между строкой 2 и линией 3?Array literal применим только для декларации?

+1

Это просто, как указано на языке Java. Независимо от того, считаете ли вы, что язык может или должен поддерживать ошибочный синтаксис, он просто этого не делает. –

+0

Не все, что придумали отцы языка Java, составляет 100% смысла. Поскольку я даже не могу думать о причине, почему эти правила упрощали бы парсинг. – GhostCat

+1

Является ли это java или C#? Пожалуйста, не помещайте вопрос как – Rob

ответ

2

Вот как работает Java или C#, не может на это жаловаться. Если мы придем к семантике языка программирования, строка 2 вводит некоторую двусмысленность, которая на самом деле не нужна, и если мы думаем о действительно продвинутых вещах например, дерево разбора , которое должно быть построено для оператора, такого как строка 2, мы сталкиваемся с большими проблемами.

читал некоторые вещи о анализаторах, если Вам нравится link to parse trees