Operator new w Javie jest używany do tworzenia nowych instancji obiektów. Proces tworzenia obiektu obejmuje przydzielanie pamięci, inicjalizację pól i wywołanie konstruktora.
W klasycznych językach programowania przydzielanie pamięci i inicjalizacja obiektu mogły przebiegać oddzielnie. W Javie są one połączone i kontrolowane przez maszynę wirtualną (JVM), co zmniejsza liczbę błędów i wycieków pamięci.
Niezrozumienie procesów zachodzących podczas tworzenia obiektu może prowadzić do błędnej inicjalizacji, wycieków pamięci lub nieoczekiwanego zachowania.
Przy użyciu operatora new:
Przykład kodu:
Osoba p = new Osoba("Ivan", 20);
Po tym w pamięci pojawia się oddzielny obiekt Osoba, który można używać.
Kluczowe cechy:
Czy można uniknąć używania operatora new podczas tworzenia obiektów?
Tak. Na przykład podczas klonowania (clone()), deserializacji, używania refleksji (Class.newInstance()), ale mają one swoje niuanse i ograniczenia.
Czy new tworzy nowy obiekt w puli łańcuchów?
Nie. Jeśli utworzyć łańcuch w ten sposób — new String("abc"), zostanie utworzony nowy obiekt w stercie, nawet jeśli taki łańcuch już istnieje w puli String. Lepiej używać literałów dla łańcuchów.
Czy działanie new dla tablic różni się?
Tak. Dla tablic operator new przydziela pamięć dla wszystkich elementów tablicy i inicjalizuje je wartościami domyślnymi, ale nie wywołuje konstruktorów dla elementów, jeśli nie są to typy prymitywne.
String[] arr = new String[5]; // Wszystkie elementy będą null
Programista pisze:
String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); // false
Zalety:
Wady:
Programista pisze:
String s1 = "hi"; String s2 = "hi"; System.out.println(s1 == s2); // true
Zalety:
Wady: