Sobes.tech
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 null referansı 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