Инициализация массива со значениями - должен ли я явно указывать класс или нет?
Я часто вижу, как массивы инициализируются следующим образом:
String[] array = new String[] { "foo", "bar", "baz" };
Но чтение Language Basics - Arrays показывает, что короткий синтаксис не требует явного инстанцирования конструктора:
В качестве альтернативы вы можете использовать синтаксис ярлыков для создания и инициализировать массив:
int[] anArray = {
100, 200, 300,
400, 500, 600,
700, 800, 900, 1000
};
Итак, предполагая эти два метода инициализации:
String[] array = new String[] { "foo", "bar", "baz" };
String[] array2 = { "foo", "bar", "baz" };
Есть ли разница между ними? Оба, похоже, работают одинаково, в этом случае следует предположить, что второй из них неявно вызывает new String[]
, а первый - просто более подробный способ, или есть еще что-то за кулисами?
Начиная с Java, извините, если это слишком глупо вопрос, но я ничего не мог найти об этом в Интернете.
Ответы
Ответ 1
Два метода эквивалентны. Обратите внимание, однако, что сжатый синтаксис может использоваться только в объявлениях переменных. В объявлениях внешних переменных вы должны использовать подробный синтаксис:
String[] array;
array = new String[] { "foo", "bar", "baz" }; // OK
String[] array2;
array2 = { "foo", "bar", "baz" }; // ERROR
Для дальнейшего обсуждения см. этот ответ.
Ответ 2
Есть ли разница между ними?
В конечном результате нет никакой разницы. Однако, согласно JLS & sect; 10.6, вы не можете использовать синтаксис инициализатора массива в каждом контексте.
Инициализатор массива может быть указан в объявлении (§8.3, §9.3, §14.4) или как часть выражения создания массива (§15.10), чтобы создать массив и предоставить некоторые начальные значения.
Ответ 3
Поскольку массивы предназначены для изменяемости, имеет смысл, что каждый из них является новым экземпляром
String[] array1 = { "foo", "bar", "baz" };
String[] array2 = { "foo", "bar", "baz" };
то есть. изменение array1
не повлияет на array2
.