come jvm gestisce la creazione di oggetti all’interno di un ciclo

List list = new ArrayList(); String[] test = {"ram", "mohan", "anil", "mukesh", "mittal"}; for(int i =0; i < test.length; i++) { A a = new A(); a.setName(test[i]); list.add(a); } 

In che modo JVM gestisce la creazione dell’object a in ogni ciclo? In che modo “elenco” si differenzia tra le diverse istanze? È buona pratica creare oggetti su ogni iterazione. Se no, qual è la soluzione migliore per aggiungere un object in una lista.

Nel tuo esempio viene creato un nuovo object su ogni iterazione del ciclo. La lista è in grado di distinguere tra loro perché non gli interessa che li chiami tutti “a” nel tuo codice, li tiene traccia del riferimento che viene riassegnato ogni volta che chiami

 a = new A(); 

Ogni volta che viene chiamata la riga di codice, viene creato un nuovo object sull’heap e il suo indirizzo in memoria viene assegnato al riferimento a. È quel riferimento che la lista conserva di un record, non il nome della variabile.

Questo è un modo perfetto e normale per compilare una lista (a parte gli errori di syntax che altri hanno menzionato, che presumo tu possa risolvere quando cerchi di compilare il tuo codice).

Elenco contiene un riferimento a ciascuna istanza di un object che viene creato. Va bene creare ogni object all’interno del ciclo (presumo tu voglia dire al contrario di dichiarare la variabile ‘a’ al di fuori del ciclo e quindi riassegnarla ogni iterazione).

È buona pratica creare un nuovo object per ogni iterazione? Uno dei miei amici mi ha detto che non è una buona pratica creare così tante istanze.

Se hai bisogno di diverse istanze individuali, devi crearle. Dato che la tua lista ha bisogno di cinque oggetti con nomi diversi ciascuno (ram, mohan, anil e così via), hai bisogno di un nuovo object per ogni iterazione del ciclo. In quale altro modo hai intenzione di memorizzare i cinque nomi?

Per quanto riguarda la dichiarazione della variabile al di fuori del ciclo, non penso che ciò faccia la differenza dal punto di vista delle prestazioni e riduca anche la leggibilità.

 A a; // dont do this for(int i =0; i < test.length; i++){ a = new A(); a.setName(test[i]); list.add(a); } 

Potresti essere interessato al ciclo for-each

 for(String name: test){ A a = new A(); a.setName(name); list.add(a); } 

Se la mia comprensione della JVM è corretta, il codice postato non avrà alcuna differenza di prestazioni rispetto a

 for (String name : test ) { list.add(new A(name)); } 

(presupponendo, ovviamente, che il costruttore A (String s) sia un altro modo per creare una nuova istanza con un nome specifico)