bugün

java

Primitive ve Referans tipler arasında bazı farklar bulunmaktadır.

Eğer primitive tiplerle çalışılıyorsa sakladıkları değerler de yine primitive değerlerdir. Bunlar basitçe bilinen int, char, short, double, long, boolean olabilir.

Referans tipler sınıflar ya da arrayler olabilirler. Referans tiplerin değişkenleri primitive değerler yerine adresleri saklar.

Primitive tiplerde kopyalama işleminde değeri kopyalanırken, referans tiplerde o referansın adresi kopyalanır.

Belki de en önemli fark karşılaştırma işlemlerinde. Primitive tiplerde karşılaştırma yaparken değerler karşılaştırılır.

Örnek

int a = 5, b = 5;

a == b ===> true

Ancak referans tiplerde karşılaştırma adresler üzerinden gerçekleştirilir. iki farklı referans tip atamasının sonucunda adresler farklı olacağından karşılaştırma sonucu da yanlış olur.

Integer a = 5;
Integer b = 5;

a == b ===> false

Adresler eşit değildir çünkü.

Bu bağlamda primitive tipli bir method yine geriye değer döndürürken, referans tipli methodlar adres döndürürler.

Primitive tipler stack bölgesinde saklanırlar ki bu da garbage collection işlemini yaşamamaları demek. Bu sayede heap kısmında da performans elde edilir.

Referans tipler heap kısmında yer alırlar. Bellek yönetimleri garbage collector tarafından yapılır ki java gibi dillerde jvm ne kadar izin veriyorsa o kadar yönetilir. Bu da performans kaybı yaşatabilir.

Referans tipler oluşturulunca her referans tip için heapte adres tahsisi yapılır. Performans kaybına sebep olabilir.

Bir de javada string galiba sadece referans tipindeydi. Bunun için struct gibi çözümler kullanılıyor.