Мне интересно,
Какая разница между этими двумя способами инициализации массива примитивов:
int[] arr1 = new int[]{3,2,5,4,1};
int[] arr2 = {3,2,5,4,1};
и какой из них предпочтительнее?
Мне интересно,
Какая разница между этими двумя способами инициализации массива примитивов:
int[] arr1 = new int[]{3,2,5,4,1};
int[] arr2 = {3,2,5,4,1};
и какой из них предпочтительнее?
Нет, они создают точно такой же байт-код. Я думаю, может быть, что вторая форма не поддерживалась в более старых версиях Java, но это было бы на некоторое время назад.
Таким образом, это становится вопросом стиля, который является личным предпочтением. Поскольку вы специально спросили, I предпочитает второй, но опять же, это вопрос личного вкуса.
Как отмечали другие, они эквивалентны, а второй вариант менее подробный. К сожалению, компилятор не всегда может понять второй вариант:
public int[] getNumbers() {
return {1, 2, 3}; //illegal start of expression
}
В этом случае вы должны использовать полный синтаксис:
public int[] getNumbers() {
return new int[]{1, 2, 3};
}
Между этими двумя утверждениями нет разницы. Лично говоря, второй предпочтительнее. Потому что у вас есть все элементы, указанные в фигурных скобках. Компилятор поможет вам вычислить размер массива.
Поэтому нет необходимости добавлять int[]
после оператора присваивания.
В вашем случае эти два стиля заканчиваются одинаковым эффектом, оба правильные, а второй - более кратким. Но на самом деле эти два стиля отличаются.
Помните, что массивы в java представляют собой структуры данных фиксированной длины. Создав массив, вы должны указать длину.
Без инициализации первый случай
int[] arr1 = new int[5];
Во втором случае это будет
int[] arr2 = {0,0,0,0,0};
Вы видите разницу? В этой ситуации предпочтительным является первый стиль, так как вам не нужно вручную вводить все эти начальные значения по умолчанию.
Для меня единственное большое различие между этими двумя стилями заключается в создании массива без явной инициализации.
В этом случае второй, потому что он более симпатичный и менее подробный:)
полезно в этой ситуации
void foo(int[] array) {
}
вызов с буквальным
// works
foo(new int[]{5, 7})
//illegal
foo({5, 7})