L'opérateur new en Java est utilisé pour créer de nouvelles instances d'objets. Le processus de création d'un objet inclut l'allocation de mémoire, l'initialisation des champs et l'appel du constructeur.
Dans les langages de programmation classiques, l'allocation de mémoire et l'initialisation d'un objet pouvaient se faire séparément. En Java, elles sont conjointes et contrôlées par la machine virtuelle (JVM), ce qui réduit le nombre d'erreurs et les fuites de mémoire.
Une mauvaise compréhension des processus se produisant lors de la création d'un objet peut entraîner une initialisation incorrecte, des fuites de mémoire ou un comportement inattendu.
Lors de l'utilisation de l'opérateur new :
Exemple de code :
Person p = new Person("Ivan", 20);
Après cela, un objet Person distinct est créé en mémoire, qui peut être utilisé.
Caractéristiques clés :
Peut-on éviter d'utiliser l'opérateur new lors de la création d'objets ?
Oui. Par exemple, lors du clonage (clone()), de la désérialisation, de l'utilisation de la réflexion (Class.newInstance()), mais cela a ses nuances et limitations.
Est-ce que new crée un nouvel objet dans le pool de chaînes ?
Non. Si vous créez une chaîne de cette manière : new String("abc"), un nouvel objet sera créé dans le tas, même si cette chaîne existe déjà dans le pool de chaînes. Il est préférable d'utiliser des littéraux pour les chaînes.
Le fonctionnement de new pour les tableaux est-il différent ?
Oui. Pour les tableaux, l'opérateur new alloue de la mémoire pour tous les éléments du tableau et les initialise avec des valeurs par défaut, mais n'appelle pas les constructeurs pour les éléments, sauf s'il s'agit de types primitifs.
String[] arr = new String[5]; // Tous les éléments seront null
Un développeur écrit :
String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); // false
Avantages :
Inconvénients :
Un développeur écrit :
String s1 = "hi"; String s2 = "hi"; System.out.println(s1 == s2); // true
Avantages :
Inconvénients :