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
nullga 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