Junior
Referans veri tipleri nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Referans tipleri, değeri değil, bu değerin bulunduğu yere (bellek adresi) bir referansı saklar.
Özellikler:
- Referans tipi değişkenler
nullreferansı saklayabilir. - Bir referans tipi değişkenin değerini başka bir değişkene atarken, değer değil, referans kopyalanır. Her iki değişken aynı bellek konumuna işaret eder.
- Bir referans aracılığıyla yapılan değişiklikler, eğer her ikisi de aynı nesneye işaret ediyorsa, diğerinden de görülebilir.
- Referans tipleri nesneleri için bellek, çöp toplayıcı tarafından yönetilir.
Referans tipi veri örnekleri:
- Dizgeler (
String) - Diziler
- Kullanıcı tanımlı sınıf nesneleri
- Delegeler (bazı dillerde)
Değer tipleriyle farkları:
| Özellik | Değer Tipleri | Referans Tipleri |
|---|---|---|
| Depolama | Kendisi değer | Bir referans, değere işaret eder |
| Kopyalama | Kendisi kopyalanır | Referans kopyalanır |
| Değişiklik | Kopya üzerindeki değişiklikler orijinali etkilemez | Bir referans aracılığıyla yapılan değişiklikler diğerinde görünür (aynı nesneye işaret ediyorsa) |
| Bellek | Yığın (stack) tarafından yönetilir | Yığın dışında, çöp toplayıcı tarafından yönetilir |
| Örnekler | int, float, bool, struct (bazı dillerde) |
String, Array, Object |
// C# örneği
string s1 = "Hello"; // s1, "Hello" dizgesine referans tutar
string s2 = s1; // s2, aynı referansa işaret eder
// Değişiklik yapıldığında, diğer referanstan görünmez,
// çünkü C#'ta dizgeler değiştirilemez (immutable).
// Değişiklik yapıldığında yeni bir dizge oluşturulur ve referans yeniden atanır.
s1 = "World";
Console.WriteLine(s2); // "Hello" yazdırır
int[] arr1 = { 1, 2, 3 }; // arr1, {1, 2, 3} dizisine referans tutar
int[] arr2 = arr1; // arr2, aynı referansa işaret eder
arr2[0] = 10; // arr2 üzerinden değişiklik
Console.WriteLine(arr1[0]); // 10 yazdırır, değişiklik arr1 üzerinden de görünür
// Java örneği
String s1 = "Hello"; // s1, "Hello" dizgesine referans tutar
String s2 = s1; // s2, aynı referansa işaret eder
// Java'da dizgeler değiştirilemez (immutable).
// Değişiklik yapıldığında yeni bir dizge oluşturulur ve referans yeniden atanır.
s1 = "World";
System.out.println(s2); // "Hello" yazdırır
int[] arr1 = { 1, 2, 3 }; // arr1, {1, 2, 3} dizisine referans tutar
int[] arr2 = arr1; // arr2, aynı referansa işaret eder
arr2[0] = 10; // arr2 üzerinden değişiklik
System.out.println(arr1[0]); // 10 yazdırır, değişiklik arr1 üzerinden de görünür