Sobes.tech
Junior

Nima referens ma'lumot turlari?

sobes.tech AI

AIdan javob

Ma'lumot turlari qiymat emas, balki uning joylashgan joyiga (xotira manziliga) havola (referensiya) saqlaydi.

Xususiyatlar:

  • Havola turidagi o'zgaruvchilar null ga havolani saqlashi mumkin.
  • Bir havola turidagi o'zgaruvchining qiymatini boshqa o'zgaruvchiga tayinlaganda, qiymat emas, havola nusxalanadi. Ikkala o'zgaruvchi bir xil joyga ishora qiladi.
  • Bir havola orqali kiritilgan o'zgarishlar, agar ular bir xil ob'ektga ishora qilsa, ikkinchisida ham ko'rinadi.
  • Havola turlaridagi ob'ektlar uchun xotira garbage collector tomonidan boshqariladi.

Havola turlariga misollar:

  • Matn satrlari (String)
  • Massivlar
  • Maxsus sinf ob'ektlari
  • Delegatlar (ba'zi tillarda)

Qiymat turlaridan farqi:

Xususiyat Qiymat turlari Havola turlari
Saqlash Qiymat o'zi Qiymatga havola
Nusxa olish Qiymat o'zi nusxalanadi Havola nusxalanadi
O'zgartirish Nusxadagi o'zgarishlar aslga ta'sir qilmaydi Havola orqali o'zgartirishlar ikkinchisida ham ko'rinadi (agar ular bir xil ob'ektga ishora qilsa)
Xotira Stack (yoki odatda) tomonidan boshqariladi Heap tomonidan boshqariladi, garbage collector tomonidan tozalanadi
Misollar int, float, bool, struct (ba'zi tillarda) String, Array, Object
// C# misoli
string s1 = "Hello"; // s1, "Hello" satriga havola qiladi
string s2 = s1;      // s2, endi s1 bilan bir xil havolaga ega

// O'zgartirishda, boshqa havoladan ko'rinmaydi,
// chunki C# da satrlar o'zgarmas (immutable).
// O'zgartirish uchun yangi satr yaratiladi va havola qayta tayinlanadi.
s1 = "World"; 

Console.WriteLine(s2); // "Hello" ni chiqaradi

int[] arr1 = { 1, 2, 3 }; // arr1, {1, 2, 3} massiviga havola qiladi
int[] arr2 = arr1;     // arr2, endi bir xil havolaga ega

arr2[0] = 10;          // arr2 orqali o'zgartirish

Console.WriteLine(arr1[0]); // 10 ni chiqaradi, o'zgartirish arr1 da ham ko'rinadi

// Java misoli
String s1 = "Hello"; // s1, "Hello" satriga havola qiladi
String s2 = s1;      // s2, endi s1 bilan bir xil havolaga ega

// Java da satrlar o'zgarmas (immutable).
// O'zgartirishda, yangi satr yaratiladi va havola qayta tayinlanadi.
s1 = "World"; 

System.out.println(s2); // "Hello" ni chiqaradi

int[] arr1 = { 1, 2, 3 }; // arr1, {1, 2, 3} massiviga havola qiladi
int[] arr2 = arr1;     // arr2, endi bir xil havolaga ega

arr2[0] = 10;          // arr2 orqali o'zgartirish

System.out.println(arr1[0]); // 10 ni chiqaradi, o'zgartirish arr1 da ham ko'rinadi