1: Alcune parole: Non istanziamo affatto gli oggetti, istanziamo le classi e il prodotto di un'istanza di classe è un oggetto (chiamato anche un'istanza). Ovviamente possiamo istanziare una classe tante volte quanto è necessario per creare un nuovo oggetto diverso con ogni istanza.
2: In ogni caso, non puoi avere il codice che suggerisci:
Test test = new Test();
Test test = new Test();
nessuno dei due può avere questo:
for (i=0; i<3; i++) {
Test test = new Test();
Test test = new Test();
}
Nessuno verrà compilato, poiché la parte Test test
è la dichiarazione della variabile test
(di tipo Test
), e nessuna lingua, incluso Java, consente di dichiarare due volte la stessa variabile nello stesso ambito.
Tuttavia puoi assegnare più volte la stessa variabile (come suggerisce il nome), con oggetti diversi, come questo:
Test test = new Test();
test = new Test();
La prima riga dichiara test
e assegna un oggetto appena creato. La seconda riga assegna a test
un altro oggetto, anch'esso appena creato.
Nota inoltre che i collegamenti sono consentiti in Java:
for (i=0; i<3; i++) {
Test test = new Test();
}
Questo ciclo non dichiarerà test
3 volte. Si intende assegnare tre nuovi oggetti diversi in sequenza alla variabile test
che sarà dichiarata una sola volta. (confronta con il ciclo precedente).
3: Cosa succede alla variabile test
e ai due oggetti di tipo Test
?
La variabile test
viene prima assegnata al riferimento di un oggetto, quindi di un altro oggetto. Una variabile conserva solo l'ultimo riferimento assegnato.
Il primo oggetto di tipo Test
non è più assegnato a test
. Se a nessun'altra variabile è stato assegnato il suo riferimento, allora questo oggetto non può essere in alcun modo accessibile dal programma, e quindi è inutile. È reso idoneo alla garbage collection dal sistema. Ad un certo punto nel tempo il sistema (la JVM) eseguirà il suo garbage collector che lo cancellerà dalla memoria.
Il secondo oggetto vivrà fintanto che almeno una variabile lo fa riferimento, quindi il garbage collector si prenderà cura di esso e lo porterà al Cimitero degli oggetti senza riferimento. Questa è la vera vita degli oggetti Java: - (