1: Algunas palabras: no instanciamos objetos en absoluto, instanciamos clases, y el producto de una instanciación de clase es un objeto (también llamado instancia). Por supuesto, podemos crear una instancia de una clase tantas veces como sea necesario para crear un objeto nuevo y diferente con cada instanciación.
2: Lo que sea, no puede tener el código que sugiere:
Test test = new Test();
Test test = new Test();
tampoco puedes tener esto:
for (i=0; i<3; i++) {
Test test = new Test();
Test test = new Test();
}
Ninguno compilará, porque la parte Test test
es la declaración de variable test
(de tipo Test
), y ningún lenguaje, incluido Java, permite declarar dos veces la misma variable en el mismo ámbito.
Sin embargo, puede asignar varias veces la misma variable (como su nombre lo indica), con diferentes objetos, como este:
Test test = new Test();
test = new Test();
La primera línea declara test
y le asigna un objeto recién creado. La segunda línea se asigna a test
otro objeto, también recién creado.
También tenga en cuenta que los accesos directos están permitidos en Java:
for (i=0; i<3; i++) {
Test test = new Test();
}
Este bucle no se declarará test
3 veces. Se entiende como asignar tres nuevos objetos diferentes en secuencia a la variable test
que se declarará solo una vez. (comparar con el bucle anterior).
3: ¿Qué le sucede a la variable test
y a los dos objetos de tipo Test
?
A la variable test
primero se le asigna la referencia de un objeto, luego de otro objeto. Una variable retiene solo la última referencia asignada.
El primer objeto de tipo Test
ya no está asignado test
. Si a ninguna otra variable se le ha asignado su referencia, el programa no puede acceder a este objeto de ninguna manera y, por lo tanto, es inútil. El sistema lo hace elegible para la recolección de basura. En algún momento el sistema (la JVM) ejecutará su recolector de basura que lo borrará de la memoria.
El segundo objeto vivirá mientras al menos una variable lo haga referencia, luego el recolector de basura también lo cuidará y lo llevará al Cementerio de objetos sin referencia. Esa es la verdadera vida de los objetos Java :-(