El operador new en Java se utiliza para crear nuevas instancias de objetos. El proceso de creación de un objeto incluye la asignación de memoria, la inicialización de campos y la llamada al constructor.
En los lenguajes de programación clásicos, la asignación de memoria y la inicialización del objeto podían ocurrir por separado. En Java, están combinadas y controladas por la máquina virtual (JVM), lo que reduce la cantidad de errores y fugas de memoria.
El malentendido de los procesos que ocurren al crear un objeto puede llevar a una inicialización incorrecta, fugas de memoria o comportamientos inesperados.
Al utilizar el operador new:
Ejemplo de código:
Person p = new Person("Ivan", 20);
Después de esto, en memoria aparece un objeto Person separado que se puede utilizar.
Características clave:
¿Se puede evitar el uso del operador new al crear objetos?
Sí. Por ejemplo, al clonar (clone()), deserializar, utilizar reflexión (Class.newInstance()), pero tienen sus propios matices y limitaciones.
¿Crea new un nuevo objeto en el pool de cadenas?
No. Si se crea una cadena así — new String("abc"), se creará un nuevo objeto en el montón, incluso si ya hay una cadena así en el String pool. Es mejor usar literales para las cadenas.
¿Difiere el funcionamiento de new para arreglos?
Sí. Para los arreglos, el operador new asigna memoria para todos los elementos del arreglo e inicializa sus valores por defecto, pero no llama a los constructores para los elementos, a menos que sean primitivos.
String[] arr = new String[5]; // Todos los elementos serán null
El desarrollador escribe:
String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); // false
Pros:
Contras:
El desarrollador escribe:
String s1 = "hi"; String s2 = "hi"; System.out.println(s1 == s2); // true
Pros:
Contras: