vectores valores tutorial matrices manejar llenado ingresar ejemplos bidimensionales arreglos arreglo java arrays compilation

java - valores - Inicializador de matriz bidimensional seguido de corchetes



tutorial java 10 matrices arreglos bidimensionales (6)

Tengo un problema para entender este fragmento de código:

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

¿Por qué es compilable y cómo puedo entender tal declaración?


Básicamente, estás creando una matriz bidimensional anónima ( new int[][]{{1}} ) y luego tomando el primer elemento de esa matriz bidimensional ( {1} ) y asignándola a la variable.

Vamos paso a paso, porque esto en realidad es un poco confuso.

new int[][]{{1}} : Esto crea una matriz bidimensional que tiene un solo elemento: una matriz, que contiene una matriz, que contiene una int (el número 1). Debido a que no está asignado a una variable en ningún lado y no se podrá acceder a él después de esta declaración, lo llamamos "anónimo" y tiene el alcance más pequeño posible.

[0] : accede al primer elemento de la matriz anónima bidimensional que creamos anteriormente. El primer elemento es una matriz unidimensional que contiene 1 (es decir, {1} ).

int[] it = : Finalmente, aquí tomamos esa matriz unidimensional recuperada y la almacenamos en nuestra variable.

Como nota al margen, no hay absolutamente ninguna razón para hacerlo de esta manera, y parece ser un rompecabezas de Java muy interesante.


La new int[][]{{1}} asigna una nueva matriz 2D de 1x1. El (único) elemento se establece en 1.

El [0] devuelve una referencia a la primera (y la única) fila, que es de tipo int[] .

El int[] it = ... declara una variable y la inicializa con la referencia anterior.

El resultado final es equivalente a int[] it = new int[]{1} .


Lo que estás haciendo aquí es:

  1. Declare una nueva variable int[] it (que es una matriz unidimensional)
  2. Asigne su valor desde el primer elemento [0]
  3. de la matriz bidimensional new int[][]
  4. que se inicializa para ser {{1}}

Entonces usted crea una matriz bidimensional que inicializa para contener una matriz que contiene 1 y al mismo tiempo toma el primer elemento de la matriz externa (que es una matriz unidimensional que contiene 1 ) y la asigna a su variable.


Trataré de descomponerlo

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

Por lo tanto, es más o menos equivalente al siguiente código:

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];


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

La matriz entera it le asigna lo siguiente:

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


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

Vamos a dividir este en cada etapa, y lo que significa.

new int[][]

Esta es una nueva matriz multidimensional.

{{1}}

Esta es una matriz multidimensional literal. Hace una matriz que se ve así:

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

Así que tome nota, cada elemento dentro de esta matriz es en sí mismo una matriz. Luego ha especificado que su variable es igual a la primera matriz en la matriz multidimensional, por lo que equivale directamente a:

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