¿La matriz de Java de primitivas se almacena en la pila o el montón?

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

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.

More Interesting

¿Por qué algún algoritmo tiene la misma salida?

¿Qué tan rápido irá un bote de semi desplazamiento de 24.5 m LWL x 6.4 m con una viga de 80 t con 1200 hp? ¿Tiene actualmente 2700 hp y pesa 85 t y va a 34 kts?

¿Cómo funciona el algoritmo de Clasificación de Señal Múltiple (MUSIC)?

Funciones hash: ¿Cuál es una explicación intuitiva de los diversos algoritmos SHA? ¿Cuáles son las mejoras clave entre cada familia?

Cómo mostrar un problema es NP completo

¿Existe un algoritmo para identificar el género basado en el nombre?

¿Cuál es la mejor manera de entender la recursividad, especialmente en los árboles?

¿Es adecuado usar un algoritmo de hash perceptual para desarrollar un motor de búsqueda de imágenes?

¿Pueden los algoritmos predecir el futuro?

¿Qué te dirías a ti mismo cuando recién comenzaste a programar, aprender algoritmos?

¿Debería un algoritmo de aprendizaje automático estar completo?

¿Cuáles son los ejemplos de aplicación de la estructura de datos gráficos en la programación real?

Me gustaría obtener una fórmula matemática para la siguiente ecuación: tengo una matriz de elementos 'n' para los cuales quiero agregar la diferencia entre el elemento de matriz actual y el anterior. ¿Cómo puedo definir una fórmula matemática para explicar lo que estoy haciendo?

¿Cuáles son las explicaciones sobre las notaciones asintóticas con ejemplos de algoritmos?

En este algoritmo de clasificación de radix, ¿qué representa cada variable? (Java)