Değer Ve Referans Tipleri

Zahit Ziya GÜREL
3 min readApr 30, 2021

--

Not Defterime Notlar serisinin başlangıcı olarak “Değer ve Referans Tiplerinden” bahsederken aynı zamanda “Heap ve Stack” kavramlarından bahsedeceğim.

Değişkenler heap ve stack olarak iki farklı bölgede tutulur. Bu değişken tipleri ise bu bölgelerde yer almaktadır. Öncelikle stack ve heap ne olduğunu anlayalım.

STACK

Programla yaparken kullandığımız basit veri tiplerini tutar. (int, short, byte, long vb.) stack’de yer tahsisi statik olarak yapılır ve çalışma zamanında kullanılır. Stack’de kullanılmayan veriler derleyici tarafından otomatik olarak silinir.

HEAP

Oluşturduğumuz nesnelerin tamamı burada yer almaktadır. (String, object, class, interface vb.) Heap’te yer tahsisi dinamik olarak yapılmaktadır. Heap’teki verilerin silinmesi için Garbage Collector kullanılmaktadır.

Tipler ise Değer ve Referans olmak üzere ikiye ayrılır.

DEĞER TİPİ

  • Değer Tipleri, stack üzerinde statik olarak tutulmaktadır. Bellekte tuttuğu değer kadar boyut kaplamaktadır.
  • int, short, byte, long, float, double, char, byte, short gibi..
  • “sayi1” ve “sayi2” olarak referans tipli değişkenlerimiz olsun. Bu parametreler için bellekte yeni alan oluşturulur. “sayi2” parametresine “sayi1” parametresinin bellekteki adresi yerleştirilir ve bu adresteki veriler kullanılır.
  • Yeni yapılacak değişiklikler yeni oluşturulan bellek bölgesinde bulunan veri kullanılır.
Değer Tipi
  • Atama sonrası “sayi1” deki herhangi bir değişiklik “sayi2” adresinde herhangi bir etki yapmayacaktır. Yukarıdaki örnekte olduğu gibi “sayi1” atama yapıldığı halde sonuç olarak yeni adresteki veriyi elde ederiz.
  • Stack’deki değişim yukarıdaki gibi olmuştur.

REFERANS TİPİ

  • Referans Tipleri, Heap üzerinde dinamik halde tutulmaktadır.
  • Bunlar String, object, class, interface, array, dizi gibi…
  • “sayilar1” ve “sayilar2” isimlerinde dizi oluşturulur. Bu dizilerle bellekte yeni bir adres oluşturmuş oluruz. “sayilar2” dizisine “sayilar1” dizisinin adresi verilir.
  • Artık “sayılar2”’nin adresi “sayilar1” adresini tutmaktadır.
Referans Tipi
  • Atama sonrasında “sayilar1” üzerinde yapılacak her bir değişiklik “sayılar2” dizisi üzerinde de gerçekleşecektir. Yukarıdaki örnekte olduğu gibi “sayilar1” dizisinin 0. elamanına 11 sayısı atandığı için “sayilar2” dizisinin 0. elamanı da 11 olacaktır.
  • Heap üzerindeki değişim yukarıdaki gibi olmuştur. “sayilar1” dizisinin adresini “sayilar2” adresine eşitledik. Bu sayede her iki dizide yukarıdaki gibi aynı adresi göstermektedir. “sayilar1” için yapılacak her bir değişiklik “sayilar2” doğrudan etkileyecektir.

Son…

--

--

Zahit Ziya GÜREL
Zahit Ziya GÜREL

Written by Zahit Ziya GÜREL

Full Stack Java Developer at Turkcell

No responses yet