L'operatore new in Java viene utilizzato per creare nuove istanze di oggetti. Il processo di creazione di un oggetto include l'allocazione della memoria, l'inizializzazione dei campi e la chiamata del costruttore.
Nei linguaggi di programmazione classici, l'allocazione della memoria e l'inizializzazione dell'oggetto potevano avvenire separatamente. In Java sono combinati e controllati dalla macchina virtuale (JVM), riducendo il numero di errori e perdite di memoria.
La mancanza di comprensione dei processi che avvengono durante la creazione di un oggetto può portare a una inizializzazione errata, perdite di memoria o comportamenti inaspettati.
Quando si utilizza l'operatore new:
Esempio di codice:
Person p = new Person("Ivan", 20);
Dopo ciò, in memoria appare un oggetto Person separato, che può essere utilizzato.
Caratteristiche chiave:
Si può evitare l'uso dell'operatore new durante la creazione di oggetti?
Sì. Ad esempio, durante il cloning (clone()), deserializzazione, utilizzo di reflection (Class.newInstance()), ma hanno le loro sfide e limitazioni.
L'operatore new crea un nuovo oggetto nel pool di stringhe?
No. Se si crea una stringa in questo modo — new String("abc"), verrà creato un nuovo oggetto nell'heap, anche se esiste già una stringa nel pool di stringhe. È meglio utilizzare letterali per le stringhe.
Il funzionamento di new è diverso per gli array?
Sì. Per gli array, l'operatore new alloca memoria per tutti gli elementi dell'array e li inizializza con valori predefiniti, ma non chiama i costruttori per gli elementi, a meno che non siano primitivi.
String[] arr = new String[5]; // Tutti gli elementi saranno null
Uno sviluppatore scrive:
String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); // false
Vantaggi:
Svantaggi:
Uno sviluppatore scrive:
String s1 = "hi"; String s2 = "hi"; System.out.println(s1 == s2); // true
Vantaggi:
Svantaggi: