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

Инициализировать массив примитивов

Мне интересно,

Какая разница между этими двумя способами инициализации массива примитивов:

int[] arr1 = new int[]{3,2,5,4,1};

int[] arr2 = {3,2,5,4,1};

и какой из них предпочтительнее?

4b9b3361

Ответ 1

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

Таким образом, это становится вопросом стиля, который является личным предпочтением. Поскольку вы специально спросили, I предпочитает второй, но опять же, это вопрос личного вкуса.

Ответ 2

Как отмечали другие, они эквивалентны, а второй вариант менее подробный. К сожалению, компилятор не всегда может понять второй вариант:

public int[] getNumbers() {
   return {1, 2, 3}; //illegal start of expression
}

В этом случае вы должны использовать полный синтаксис:

public int[] getNumbers() {
   return new int[]{1, 2, 3};
}

Ответ 3

Между этими двумя утверждениями нет разницы. Лично говоря, второй предпочтительнее. Потому что у вас есть все элементы, указанные в фигурных скобках. Компилятор поможет вам вычислить размер массива.

Поэтому нет необходимости добавлять int[] после оператора присваивания.

Ответ 4

В вашем случае эти два стиля заканчиваются одинаковым эффектом, оба правильные, а второй - более кратким. Но на самом деле эти два стиля отличаются.

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

Без инициализации первый случай

int[] arr1 = new int[5];

Во втором случае это будет

int[] arr2 = {0,0,0,0,0};

Вы видите разницу? В этой ситуации предпочтительным является первый стиль, так как вам не нужно вручную вводить все эти начальные значения по умолчанию.

Для меня единственное большое различие между этими двумя стилями заключается в создании массива без явной инициализации.

Ответ 5

В этом случае второй, потому что он более симпатичный и менее подробный:)

Ответ 6

полезно в этой ситуации

void foo(int[] array) {

}

вызов с буквальным

// works
foo(new int[]{5, 7})

//illegal
foo({5, 7})