De new-operator in Java wordt gebruikt om nieuwe objectinstanties te maken. Het proces van het maken van een object omvat geheugenallocatie, initialisatie van velden en het aanroepen van de constructor.
In klassieke programmeertalen konden geheugenallocatie en objectinitialisatie afzonderlijk plaatsvinden. In Java zijn ze gecombineerd en worden ze gecontroleerd door de Java Virtual Machine (JVM), wat het aantal fouten en geheugenlekken vermindert.
Onbegrip van de processen die plaatsvinden bij het maken van een object kan leiden tot onjuiste initialisatie, geheugenlekken of onverwacht gedrag.
Bij het gebruik van de new-operator:
Voorbeeldcode:
Person p = new Person("Ivan", 20);
Hierna verschijnt er een apart Person-object in het geheugen dat kan worden gebruikt.
Belangrijke kenmerken:
Kan het gebruik van de new-operator bij het maken van objecten worden vermeden?
Ja. Bijvoorbeeld, bij klonen (clone()), deserialisatie, gebruik van reflection (Class.newInstance()), maar deze hebben hun eigen nuances en beperkingen.
Creëert new een nieuw object in de string pool?
Nee. Als je een string maakt zoals new String("abc"), wordt er een nieuw object in de heap aangemaakt, zelfs als zo'n string al in de String pool bestaat. Het is beter om stringliteral te gebruiken.
Verschilt de werking van new voor arrays?
Ja. Voor arrays alloceert de new-operator geheugen voor alle array-elementen en initialiseert ze met standaardwaarden, maar roept geen constructeurs aan voor elementen, tenzij het primitieve types zijn.
String[] arr = new String[5]; // Alle elementen zullen null zijn
Een ontwikkelaar schrijft:
String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); // false
Voordelen:
Nadelen:
Een ontwikkelaar schrijft:
String s1 = "hi"; String s2 = "hi"; System.out.println(s1 == s2); // true
Voordelen:
Nadelen: