Подтвердить что ты не робот

Инициализация массива со значениями - должен ли я явно указывать класс или нет?

Я часто вижу, как массивы инициализируются следующим образом:

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, извините, если это слишком глупо вопрос, но я ничего не мог найти об этом в Интернете.

4b9b3361

Ответ 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.