En Java, una matriz almacena valores primitivos (int, char, …) o referencias (también conocidas como punteros) a objetos.
Cuando se crea un objeto utilizando «nuevo», se asigna un espacio de memoria en el montón y se devuelve una referencia. Esto también es cierto para las matrices, ya que las matrices son objetos en Java.
1. Matriz de una dimensión
int arr[] = new int[3]; |
El INT[] arr es solo la referencia a la matriz de 3 enteros. Si crea una matriz con 10 enteros, es lo mismo: se asigna una matriz y se devuelve una referencia.
2. Matriz bidimensional
¿Qué tal una matriz bidimensional? En realidad, solo podemos tener matrices unidimensionales en Java. Una matriz de 2 dimensiones es solo una matriz de matrices de 1 dimensión.
int[ ][ ] arr = new int[3][ ]; arr[0] = new int[3]; arr[1] = new int[5]; arr[2] = new int[4]; |
Las matrices multidimensionales son similares a las que puedes imaginar.
3. ¿Dónde se encuentran en la memoria?
Las matrices también son objetos en Java, por lo que la apariencia de un objeto en la memoria se aplica a una matriz.
Como sabemos, las áreas de datos en tiempo de ejecución de JVM incluyen montón, pila de JVM y otras. Para un ejemplo simple como sigue, veamos dónde se almacenan la matriz y su referencia.
class A { int x; int y; } ... public void m1() { int i = 0; m2(); } public void m2() { A a = new A(); } ... |
Con la declaración anterior, invoquemos m1 () y veamos qué sucede:
- Cuando se invoca m1, se inserta un nuevo marco (Marco-1) en la pila y la variable local i también se crea en el Marco-1.
- Luego se invoca m2 dentro de m1, se inserta otro marco nuevo (Marco-2) en la pila. En m2, se crea un objeto de clase A en el montón y la variable de referencia se coloca en el Cuadro-2. Ahora, en este punto, la pila y el montón tienen el siguiente aspecto:
Las matrices se tratan de la misma manera que los objetos, por lo que la ubicación de las matrices en la memoria es sencilla.