29.10.2024 02:26
Değer ve referans tipler nelerdir sorusuna yanıt olarak kısaca; verilerin bellekte nasıl depolandığı ve nasıl işlendiğini anlamamız gerekiyor diye açıklayabiliriz. Değer ve Referans tiplerinin de kendilerine özel görevleri vardır. Değer Tipler (Value Types) ile başlayalım.
1. Değer Tipleri (Primitive Data Types)
Değer tipleri, doğrudan değeri bellekte depolar. Java'da değer tipleri, temel ve ilkel veri türlerinden oluşur. Java'daki tüm ilkel veri türleri, primitive data types olarak adlandırılır ve toplamda 8 tanedir:
- boolean: Sadece true ve false değerlerini alabilir.
- char: Unicode karakterleri temsil eden 16 bit uzunluğunda bir veri tipidir.
- byte: 8 bit uzunluğundadır ve -128 ile 127 arasında bir tamsayıyı saklar.
- short: 16 bit uzunluğundadır ve -32,768 ile 32,767 arasında bir tamsayıyı saklar.
- int: 32 bit uzunluğundadır ve -2^31 ile 2^31-1 arasında bir tamsayıyı saklar.
- long: 64 bit uzunluğundadır ve -2^63 ile 2^63-1 arasında bir tamsayıyı saklar.
- float: 32 bit uzunluğunda tek duyarlıklı kayan noktalı sayıları saklar.
- double: 64 bit uzunluğunda çift duyarlıklı kayan noktalı sayıları saklar.
Değer tipleri veriyi tutmaya yarayan veri tipleridir, hafif ve direkt olarak işlemcide işlenebildikleri için performans avantajı sağlar.
Kullanım Örneği;
int sayi = 10;
boolean durum = true;
char harf = 'A';
Bu örnekte, sayi, durum, ve harf gibi değer tipleri bellek içinde doğrudan kendi değerleri ile temsil edilir.
2. Referans Tipleri (Non-Primitive Data Types)
Referans tipleri, bir nesnenin bellekteki adresini yani referansını saklar. Değer tiplerinin aksine, referans tipleri doğrudan veriyi değil, bellekteki bir nesnenin adresini işaret eder. Java'daki referans tipleri, ilkel veri türlerinden daha karmaşıktır ve genellikle daha büyük veri yapılarını depolamak için kullanılır.
Array (Dizi): Aynı veri tipinde birden fazla değeri saklayan veri yapılarıdır.
Class (Sınıf): Java'da nesne yönelimli programlama için kullanılan ana yapıdır. Sınıflar, referans tiplerinin temelini oluşturur.
Interface: Java'nın çoklu kalıtımı desteklemek için sunduğu bir yapıdır ve referans tipleri arasındadır.
String: Bir dizi karakteri temsil eden ve metinleri saklamak için kullanılan bir veri türüdür.
Enum: Sınırlı sayıda sabit değer içeren bir veri yapısıdır.
String isim = "Ahmet";
int[] sayilar = {1, 2, 3, 4, 5};
Person kisi = new Person("Ahmet", 25);
Yukarıda ki örnekte, isim bir String nesnesi, sayılar bir dizi ve kişi ise Person sınıfının bir nesnesidir. Her biri bellekte bir nesne olarak depolanır ve değişkenler bu nesnelere bir referans tutar.
Özellik | Değer Tipleri | Referans Tipleri |
---|---|---|
Bellek Yeri | Stack | Heap |
Bellekte Depolama | Doğrudan değeri saklar | Bellek adresini saklar |
Varsayılan Değer | 0, false, '\u0000' (null değil) | null |
Hafıza Yönetimi | Otomatik olarak serbest bırakılır | Çöp toplayıcı tarafından yönetilir |
Performans | Genelde daha hızlıdır | Genelde daha yavaştır |
Bellekte Yerleşim ve Performans
Değer Tipleri Stack hafızada saklanır ve doğrudan işlemci tarafından erişilir, bu yüzden referans tiplere nazaran daha hızlıdırlar.
Referans tipleri ise heap hafızada tutulur ve bir nesnenin heap adresine işaret eder. Heap, daha büyük veri yapılarının saklandığı yer olduğundan, genellikle daha yavaş ama daha esnektir. Heap'teki veri yapıları, çöp toplayıcı (garbage collector) tarafından yönetilir ve otomatik olarak bellekten silinir.
Java’nın çöp toplayıcı sistemi, referans tiplerini yönetmede oldukça etkilidir. Ancak, büyük nesne yapılarının sürekli olarak yaratılması ve bellekten silinmesi, zaman zaman performans sorunlarına neden olabilir.
Heap ve Stack Nedir?
Stack ve Heap bellekte bulunan (RAM) mantıksal yapılardır. Stack primitif tipleri tutar. Yani değer tipleri, hemen yukarıda konun başında bahsettiğimiz verilerin tam olarak kendisidir. Stack de veriler üst üste (LIFO) mantığında dizilir ve sırası gelmeden aradaki bir değer ile işlem yapılamaz.
Heap ve Stack arasında ki en önemli farklardan birisi heap de veriler karışık bir şekilde saklanır stack de ise artan ya da azalan adres mantığında (big and little endian) çalışır. Buna bağlı olarak heap de olan bir veriye erişmek stack de olan bir veriye erişmeye göre daha maliyetli bir işlemdir. Başka bir farkı ise stack deki veri hemen silinirken heap deki veri Garbage Collector (Çöp Toplayıcı) algoritmasına bağlıdır. Değer ve referans tipler nelerdir vb. soruların yanıtlarını almak için, internet sitemizi ziyaret edebilirsiniz.