Java'da new operatörü yeni nesne örnekleri oluşturmak için kullanılır. Nesne oluşturma süreci hafıza ayırma, alanların başlatılması ve yapıcının çağrılmasını içerir.
Klasik programlama dillerinde hafıza ayırma ve nesnenin başlatılması ayrı olarak gerçekleşebilirdi. Java'da bunlar birleştirilmiştir ve sanal makine (JVM) tarafından kontrol edilir, bu da hata ve bellek sızıntılarını azaltır.
Nesne oluşturma sürecinin yanlış anlaşılması, yanlış başlatmalara, bellek sızıntılarına veya beklenmedik davranışlara yol açabilir.
new operatörü kullanıldığında:
Örnek kod:
Person p = new Person("Ivan", 20);
Bu işlemden sonra bellekte kullanılabilir ayrı bir Person nesnesi ortaya çıkar.
Anahtar özellikler:
Nesne oluştururken new operatörünü kullanmaktan kaçınılabilir mi?
Evet. Örneğin, kopyalama (clone()), serileştirme, yansıtma kullanımı (Class.newInstance()) ile ancak bunların kendi nüansları ve sınırlamaları vardır.
new, dize havuzunda yeni bir nesne mi oluşturur?
Hayır. Eğer bir dize bu şekilde oluşturulursa — new String("abc"), bellek yığınında yeni bir nesne oluşturulur, bu String havuzunda zaten var olsa bile. Dizeler için sabitler kullanmak daha iyidir.
new operatörünün diziler için çalışması farklı mıdır?
Evet. Diziler için new operatörü dizi elemanlarının tümü için hafıza ayırır ve bunları varsayılan değerlerle başlatır, ancak bu elemanlar için yapıcıları çağırmaz, eğer bunlar ilkel türler değilse.
String[] arr = new String[5]; // Tüm elemanlar null olacak
Geliştirici yazıyor:
String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); // false
Artıları:
Eksileri:
Geliştirici yazıyor:
String s1 = "hi"; String s2 = "hi"; System.out.println(s1 == s2); // true
Artıları:
Eksileri: