Se provieni da uno sfondo in linguaggi di programmazione dinamici o di programmazione generale, la parola chiave new
può essere un po 'confusa, specialmente in linguaggi che non sembrano richiedere sempre l'uso. In Java non è raro vedere un codice come questo:
User user = ApplicationEnvironment.getCurrentUser();
String username = user.getName();
int maxLength = 255;
String message = new String("Current logged in user is: " + username);
Hm, 4 variabili e solo una deve essere utilizzata con new
? Cosa sta succedendo qui?
La chiave è comprendere la creazione di un oggetto rispetto al passaggio di un riferimento a un oggetto già esistente.
Quando chiamiamo new String("I'm a new string!")
chiediamo al computer di creare un nuovo oggetto String in memoria e di restituirci un riferimento, e di solito assegneremo quel riferimento a una variabile (come abbiamo fatto con l'ultima riga nel mio esempio.
Quindi perché nessuno degli altri esempi richiede la nuova parola chiave?
Bene, con la linea int è un po 'strano - è un "primitivo", e un primitivo non è un "oggetto" e non ha bisogno della parola chiave new
di sempre. All'inizio è fonte di confusione, ma se ti ricordi che new
si applica solo agli oggetti e non ai primitivi, starai bene. Puoi capire esattamente il motivo per cui è così, ma starai bene a premere se non capisci il perché - solo che è così che funziona in Java per ora.
Ora, con la variabile user e username la storia è completamente diversa.
Quello che sta succedendo è che un oggetto è stato creato con la nuova parola chiave da qualche altra parte , e stiamo solo ottenendo un riferimento a un oggetto che qualche altro codice invisibile ha creato per noi!
Quindi, la nuova parola chiave è quando vogliamo dire al computer "Ho bisogno di un oggetto completamente nuovo creato e salvato in memoria, per favore". Quando assegniamo solo "riferimenti" a oggetti esistenti a variabili diverse non abbiamo bisogno di nuovi!
Ora, questo dovrebbe farti chiedere "che cos'è esattamente un riferimento?" Quale è esattamente ciò che un buon corso dovrebbe spiegarti in seguito. Ci arriverai se ti infili!
Per ora, la regola da imparare è:
- Se hai bisogno di un NUOVO oggetto, avrai bisogno della nuova parola chiave.
- Se hai bisogno di un riferimento a un oggetto esistente - uno già esistente
esiste o che un altro codice creerà per te, quindi non lo farai.