В чем разница между двумя следующими методами инициализации массива:
-
Object[] oArr = new Object[] {new Object(), new Object()};
-
Object[] oArr = {new Object(), new Object()};
Связано ли это с распределением кучи/стека?
Спасибо!
В чем разница между двумя следующими методами инициализации массива:
Object[] oArr = new Object[] {new Object(), new Object()};
Object[] oArr = {new Object(), new Object()};
Связано ли это с распределением кучи/стека?
Спасибо!
Нет вообще - это просто разные способы выражения одной и той же вещи.
Вторая форма доступна только в объявлении переменной. Например, вы не можете писать:
foo.someMethod({x, y});
но вы можете написать:
foo.someMethod(new SomeType[] { x, y });
Соответствующим битом спецификации языка Java является раздел 10.6 - Инициализаторы массива:
Инициализатор массива может быть указан в объявлении, или как часть выражения создания массива (§15.10), создавая массив и предоставляя некоторые начальные значения:
Абсолютно идентичный. Второе разрешено сокращать для первого (только когда, как здесь, это делается как часть объявления переменной.
В Java все объекты живут в куче, поскольку массивы являются объектами в Java, они живут в стеке.
для этих двух нет разницы в результате, у вас будут два объекта массива с одинаковыми элементами.
Однако иногда вы столкнетесь с ситуациями, когда вы не можете их использовать, например, вы не знаете элементов массива. то вы застряли в этой форме:
Object [] array=new Object[size];
Есть еще небольшая и запоминающаяся разница!
Вы можете сделать
int[] arr;
arr= {1,2,3}; // Illegal
Но вы можете очень хорошо сделать
int[] arr;
arr = new [] {1,2,3} //Legal
Также, если вы хотите инициализировать позже, вы не сможете выполнить
int arr;
arr = new [] {1,2,3} //Illegal