Ответ 1
Это совсем не так. Первый просто делает более явным, что вы создаете массив массивов.
Я не могу понять следующий многомерный код. Может кто-нибудь прояснит меня?
int[][] myJaggedArr = new int [][]
{
new int[] {1,3,5,7,9},
new int[] {0,2,4,6},
new int[] {11,22}
};
Могу ли я узнать, как он отличается от следующего кода?
int[][] myArr = new int [][] {
{1,3,5,7,9},
{0,2,4,6},
{11,22} };
Это совсем не так. Первый просто делает более явным, что вы создаете массив массивов.
Никакой реальной разницы. Только первое объявляет вспомогательные массивы, а второе просто помещает значения, которые являются массивами в массив
Две части кода дают одинаковые результаты.
Многомерные массивы - массивы массивов.
myArr[0][1]
вернет 3myArr[1][1]
вернет 2myArr[2][0]
вернет 11Совершенно то же самое - если вы замените один на другой и скомпилируете, вы получите байт-байт для идентичных файлов class
. Попробуйте сами!
Оба эти фрагмента кода приведут к многомерным массивам с эквивалентными значениями.
Второй фрагмент показывает, что явное использование new
не требуется при использовании ярлыка литерала массива для внутренних массивов. Это справедливо и для внешнего массива. Этот код можно было бы упростить, чтобы:
int[][] myArr = { {1,3,5,7,9}, {0,2,4,6}, {11,22} };
Oracle Java Tutorial не показывает каких-либо примеров смешивания использования new
для объявления массива с объявлением литерального массива.
Начиная с начала объявления массивов выше.
Вы можете создать массив, указав:
int [] arr = new int[3]; //(eq 1)
Вы можете сделать еще один шаг, объявив значения в массиве с помощью:
int [] arr = {0,1,2}; //(eq 2)
Если вам известны ваши значения загодя, вам не нужно создавать экземпляр int [].
Теперь на ваш вопрос. Между ними нет разницы, как заявили другие, за исключением более четкой картины того, что вы делаете. Эквивалент уравнения 2 в двумерном массиве:
int [][] arr = {{0,1,2},{3,4,5},{6,7,8}}; //(eq 3)
Обратите внимание, что вам не нужно объявлять "новый int [] []", прежде чем вы начнете вводить значения. "{0,1,2}" - это массив, а также все остальное в первом "{" и последнем} в eq 3. Фактически после объявления arr вы можете вызвать массив "{0,1, 2}" из уравнения 3 следующим утверждением:
arr[0]; //(eq 4)
eq 4 эквивалентен eq 2. Вы можете отключить простой "{" с "новым int [] {" или "new int [] [] {". Если вы хотите отключить один для другого, это прекрасно, и единственная реальная разница - это погода или нет, это соответствует вашему стилю кодирования.
Для удовольствия здесь приведен пример трехмерного массива в синтаксисе коротких рук:
//Это очень длинный оператор, и я не рекомендую его использовать таким образом
int [][][] arr = {{{0,1,2},{3,4,5},{6,7,8}},
{{9,10,11},{12,13,14},{15,16,17}},
{{18,19,20},{21,22,23},{24,25,26}}};