Подтвердить что ты не робот

Двухмерный инициализатор массива, за которым следуют квадратные скобки

У меня есть проблема с пониманием этой части кода:

int[] it = new int[][]{{1}}[0];

Почему это скомпилировано и как я могу понять такое объявление?

4b9b3361

Ответ 1

Что вы здесь делаете:

  1. Объявление новой переменной int[] it (которая является одномерным массивом)
  2. Назначение его значения из первого элемента [0]
  3. двумерного массива new int[][]
  4. который инициализируется как {{1}}

Таким образом, вы создаете двумерный массив, который вы инициализируете, чтобы он содержал массив, содержащий 1, и в то же время вы берете первый элемент внешнего массива (который является одномерным массивом, содержащим 1) и назначаете его к вашей переменной.

Ответ 2

int[] it = new int[][]{{1}}[0];

Давайте разберем это на каждом этапе и что это значит.

new int[][] 

Это новый многомерный массив.

{{1}} 

Это многомерный литерал массива. Он создает массив, который выглядит следующим образом:

[0] = [1]
[1] = []
[2] = []
...
[N] = []

Итак, обратите внимание, каждый элемент в этом массиве сам является массивом. Затем вы указали, что ваша переменная it равна первому массиву в многомерном массиве, поэтому она напрямую равна:

int[] it = new int[] {1};

Ответ 3

new int[][]{{1}} выделяет новый массив 1x1 2D. Элементу (only) установлено значение 1.

[0] возвращает ссылку на первую (и единственную) строку, которая имеет тип int[].

int[] it = ... объявляет переменную и инициализирует ее ссылкой выше.

Конечный результат эквивалентен int[] it = new int[]{1}.

Ответ 4

По существу, вы создаете анонимный двумерный массив (new int[][]{{1}}), а затем берете первый элемент этого двумерного массива ({1}) и присваиваете его переменной it.

Отпустите шаг за шагом, потому что это на самом деле путается.

new int[][]{{1}}: создается двумерный массив, который имеет только один элемент: массив, содержащий один массив, содержащий один int (номер 1). Поскольку он не присваивается переменной нигде и не будет доступен через этот оператор, мы называем его "анонимным", и он имеет наименьшую возможную область.

[0]: этот доступ к первому элементу анонимного двумерного массива, который мы создали выше. Первый элемент представляет собой одномерный массив, содержащий 1 (т.е. {1}).

int[] it =: Наконец, здесь мы берем полученный одномерный массив и сохраняем его в нашей переменной.

В качестве побочной заметки нет абсолютно никаких оснований для этого, и это похоже на очень интересную Java-загадку.

Ответ 5

Я попытаюсь сломать его

new int[][] // an array of arrays (or 2-dimensional array)
{1} // an array instance with a single element: 1
{{1}} // an array instance with a single element: above array instance
[0] // the first element of an array

Таким образом, это примерно эквивалентно следующему коду:

int[] inner = new int[1]; // an empty array with length 1
inner[0] = 1;
int[][] outer = new int[1][];
outer[0] = inner;

int[] it = outer[0];

Ответ 6

int[] it = new int[][]{{1}}[0];

Целый массив it получает следующее:

new int[][] // A new 2D array is created
{{1}} // This is an initializer. The first array in the first array gets an array of 1 item: '1'
[0] // Take the first array from the 2D array