Sobes.tech
Junior

İstinad növü məlumatları nədir?

sobes.tech Süni İntellekt

AI-dan cavab

İstinad növləri öz dəyərini deyil, onun yerləşdiyi yerə (bellek ünvanına) istinad (referans) saxlayır.

Xüsusiyyətlər:

  • İstinad növü olan dəyişənlər null-a istinad edə bilər.
  • Bir istinad növü dəyişənin dəyərini digərinə təyin etdikdə, dəyər deyil, istinad kopyalanır. Hər iki dəyişən eyni yaddaş yerinə işarə edir.
  • Bir istinad vasitəsilə edilən dəyişikliklər, əgər hər ikisi eyni obyekti göstərirsə, digərindən də görünəcək.
  • İstinad növü olan obyektlərin yaddaşı garbage collector tərəfindən idarə olunur.

İstinad növlərinə nümunələr:

  • Stringlər (String)
  • Array-lər
  • İstifadəçi tərəfindən yaradılmış sinif obyektləri
  • Delegatlar (bəzən dillərdə)

Dəyər tiplərindən fərqləri:

Xüsusiyyət Dəyər tipləri İstinad tipləri
Saxlama Öz dəyəri Dəyərə istinad
Kopyalama Öz dəyəri kopyalanır İstinad kopyalanır
Dəyişiklik Kopyada edilən dəyişikliklər orijinalı təsir etmir Bir istinad vasitəsilə edilən dəyişikliklər digərində də görünür (əgər eyni obyekti göstərirlərsə)
Yaddaş Yığın (stack) tərəfindən idarə olunur (adətən) Yığım tərəfindən idarə olunur, garbage collector tərəfindən təmizlənir
Nümunələr int, float, bool, struct (bəzən dillərdə) String, Array, Object
// C#-də nümunə
string s1 = "Hello"; // s1, "Hello" stringinə istinad edir
string s2 = s1;      // s2, indi eyni istinada saxlanılır

// Dəyişiklik zamanı, digər istinad vasitəsilə görünməz,
// çünki C#-də stringlər dəyişməzdir (immutable).
// Dəyişiklik zamanı, yeni string yaradılır və istinad yenidən təyin edilir.
s1 = "World"; 

Console.WriteLine(s2); // "Hello" çıxış verir

int[] arr1 = { 1, 2, 3 }; // arr1, {1, 2, 3} array-ına istinad edir
int[] arr2 = arr1;     // arr2, indi eyni istinada saxlanılır

arr2[0] = 10;          // arr2 vasitəsilə dəyişiklik

Console.WriteLine(arr1[0]); // 10 çıxış verir, dəyişiklik arr1-də də görünür

// Java-da nümunə
String s1 = "Hello"; // s1, "Hello" stringinə istinad edir
String s2 = s1;      // s2, indi eyni istinada saxlanılır

// Java-da stringlər dəyişməzdir (immutable).
// Dəyişiklik zamanı, yeni string yaradılır və istinad yenidən təyin edilir.
s1 = "World"; 

System.out.println(s2); // "Hello" çıxış verir

int[] arr1 = { 1, 2, 3 }; // arr1, {1, 2, 3} array-ına istinad edir
int[] arr2 = arr1;     // arr2, indi eyni istinada saxlanılır

arr2[0] = 10;          // arr2 vasitəsilə dəyişiklik

System.out.println(arr1[0]); // 10 çıxış verir, dəyişiklik arr1-də də görünür