В чем разница между этими двумя? Первый на самом деле был преобразован во второй?Компилятор добавляет новый int [] при инициализации массива int в Java?
int [] ar = {1,2,3,4};
and
int [] ar = new int[]{1,2,3,4};
В чем разница между этими двумя? Первый на самом деле был преобразован во второй?Компилятор добавляет новый int [] при инициализации массива int в Java?
int [] ar = {1,2,3,4};
and
int [] ar = new int[]{1,2,3,4};
Как и другие ответы уже отмечалось, эффекты
int[] arr = {1, 2, 3, 4};
и
int[] arr = new int[]{1, 2, 3, 4};
точно так же.
В этом ответе я расскажу только, когда использовать какой из них.
Первый, очевидно, меньше, чем тип, поэтому используйте его, когда это возможно. Однако его можно использовать только при непосредственном назначении переменной. Иногда мы хотим создать массив без назначения переменной. Это называется анонимным массивом . В этом случае нам нужно использовать второй синтаксис.
head({1, 2, 3, 4}); // error
head(new int[]{1, 2, 3, 4}); // ok
return {1, 2, 3, 4}; // error
return new int[]{1, 2, 3, 4}; // ok
Наличие или отсутствие new
является лингвистическим. Это не похоже на C++, что массив создается либо в куче, либо в стеке. В Java любой не примитивный объект переходит в кучу.
+1 для «В Java любой не примитивный объект переходит в кучу». –
int [] ar = new {1,2,3,4};
не компилируется.
Если вы имеете в виду int [] ar = {1,2,3,4};
, тогда да - он идентичен int [] ar = new int[]{1,2,3,4};
.
Возникает вопрос, где именно? –
int [] ar = new {1,2,3,4};
даст вам ошибку компиляции, я предполагаю, что вы имели в виду:
int [] ar = {1,2,3,4};
В этом случае, ответ да. Это краткое описание java для объявления массива.
'int [] ar = new {1,2,3,4};' является ошибкой компиляции –
Вторая форма действительно полезна только для анонимных массивов. – 5gon12eder
@ 5gon12eder это потому, что в ar = {1,2,3} память уже выделена для ar и не нужно использовать новые []? –