Почему следующее не работает для инициализации массива?
public class TestArrays {
private static int[] numbers;
public static void main(String[] args) {
numbers = {1,2,3}; //error
}
} //class
но да таким образом?
public class TestArrays {
private static int[] numbers;
public static void main(String[] args) {
int[] arr = {1,2,3};
numbers = arr;
}
} //class
Java позволяет инициализировать массив с помощью фигурных скобок следующим образом:
Указанный формат, только в том случае, если мы объявляем переменную , может быть упрощен до
Вместо этого первый способ работает без объявления:
Почему? Что ж, кроме того, почему в спецификациях языка определено именно так, мы должны были бы попросить его создателя выяснить, почему он ограничил краткую форму объявлениями переменных. Мое мнение таково, если мы признаем следующее:
Было бы не совсем понятно, создаем ли мы во втором присваивании новый массив того же размера или заменяем значения в уже существующем объекте (массиве). Заставляя себя положить
new int[]
, сомнения проясняются.Чтобы дополнить ответ @Pablo Lozano. Спецификация Java устанавливает правильный синтаксис и где он используется, в следующих параграфах:
JLS 10.6 :
Что по-испански будет:
Где они определяют массив инициализатора как:
Где выражение создания массива определяется как: