2014-09-18 3 views
-2

В чем разница между этими двумя? Первый на самом деле был преобразован во второй?Компилятор добавляет новый int [] при инициализации массива int в Java?

int [] ar = {1,2,3,4}; 
and 
int [] ar = new int[]{1,2,3,4}; 
+4

'int [] ar = new {1,2,3,4};' является ошибкой компиляции –

+0

Вторая форма действительно полезна только для анонимных массивов. – 5gon12eder

+0

@ 5gon12eder это потому, что в ar = {1,2,3} память уже выделена для ar и не нужно использовать новые []? –

ответ

3

Как и другие ответы уже отмечалось, эффекты

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 любой не примитивный объект переходит в кучу.

+0

+1 для «В Java любой не примитивный объект переходит в кучу». –

2

int [] ar = new {1,2,3,4}; не компилируется.

Если вы имеете в виду int [] ar = {1,2,3,4};, тогда да - он идентичен int [] ar = new int[]{1,2,3,4};.

+0

Возникает вопрос, где именно? –

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

даст вам ошибку компиляции, я предполагаю, что вы имели в виду:

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

В этом случае, ответ да. Это краткое описание java для объявления массива.