Se almacena en el montón. La matriz es un objeto y los objetos se almacenan en el montón.
Creo que la pregunta se hace debido a una idea errónea bien conocida de que los valores primitivos siempre se almacenan en la pila. No es así, todas las variables locales (variables que se definen dentro de las funciones) se almacenan en la pila, ya sea que la variable local sea de tipo primitivo o el tipo de referencia decidirá dónde se almacena el valor de la variable local. Si es de tipo primitivo, tanto la variable local como su valor se almacenarán en la pila, pero si la variable local es de tipo de referencia (una que apunta a un objeto), la variable en sí se almacenará en la pila mientras el objeto apunta a se almacenará en el montón.
Espero que los ejemplos a continuación te ayuden a entender mejor->
- Cómo verificar si existe una ruta simple entre los nodos a y b de modo que pase a través del nodo c
- En la industria, ¿con qué frecuencia se usa el algoritmo de compresión Lempel-Ziv-Welch?
- ¿Pueden los algoritmos de aprendizaje automático reforzar los estereotipos?
- ¿Cuán específicamente la memoria de la clase de almacenamiento cambiará las arquitecturas, los ecosistemas (incluidas las opciones de lenguaje de programación) y los algoritmos para big data?
- ¿En qué idioma debo estudiar estructuras de datos y algoritmos? ¿Y por qué?
1 ejemplo
Persona de clase
{
}
Test de clase
{
public void someFunction ()
{
Person p = new Person (); // variable local pero de tipo de referencia
int a = 10; // variable local pero de tipo primitivo
}
}
Ahora, en el ejemplo anterior, tanto la variable local “p” como “a” se almacenarán en la pila, pero sus valores se almacenarán en el montón y la pila, respectivamente. “P” contendrá realmente la dirección de la ubicación del montón donde se almacena el objeto “nueva Persona ()” (montón), mientras que “a” contendrá el valor que es 10.
2 Ejemplo
Persona de clase pública
{
int age; // Esta es una variable de instancia, no una variable local, ya que no está definida dentro de un método
}
…
public void someOtherMethod ()
{
Person p = new Person (); // variable local pero de tipo de referencia
…
}
Ahora, ¿dónde vive p.age? Uno podría pensar que está en la pila, pero en realidad es parte del nuevo objeto Persona y vive en el montón. (Tenga en cuenta que la variable local p en sí misma vive en la pila y solo contiene la dirección del objeto “nueva Persona ()” que vive en el montón).
3 Ejemplo
clase Ejemplo3
{
public void someFunction ()
{
int [] a = new int [3] {1,2,3}; // nuevamente “a” es una variable local pero contiene un objeto, por lo que es de tipo de referencia.
}
}
Aquí, de nuevo, “a” se almacena en la pila y la matriz de 3 entradas se almacena en el montón, y “a” contiene la dirección de la matriz.
4 Ejemplo
clase pública Ejemplo4
{
int [] a = new int [3] {1,2,3}; // Esta es una variable de instancia, no una variable local, ya que no está definida dentro de un método
}
…
public void someOtherMethod ()
{
Ejemplo4 e = nuevo Ejemplo4 (); // variable local pero de tipo de referencia
…
}
Ahora ea se almacena en el montón ya que el objeto “nuevo Ejemplo4 ()” se almacena en el montón y ea es una variable de instancia del objeto (porque se define dentro de la clase pero fuera de cualquier método), y ea en los puntos de giro ( contiene la dirección de) la matriz que también vive en el montón.
Nota -> Una buena regla general es que cuando la nueva palabra clave está involucrada, el resultado estará en el montón.
Si la respuesta no es clara, no dudes en preguntarme.
También puede encontrar el libro “Head First Java” muy útil mientras aprende este tipo de conceptos y principios generales orientados a objetos. Echa un vistazo si tienes tiempo.