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:
- Declare una nueva variable
int[] it
(que es una matriz unidimensional) - Asigne su valor desde el primer elemento
[0]
- de la matriz bidimensional
new int[][]
- 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};