Junior
Көрсөтүүчү маалыматтардын түрлөрү эмнелер?
sobes.tech AI
AIден жооп
Тиркемелердин шилтемелүү түрлөрү өзүнүн маанисин сактабайт, тескерисинче, ошол мааниге жайгашкан жердин шилтемесин (адресин) сактайт.
Мүнөздөмөлөр:
- Шилтемелүү түрдөгү өзгөрмөлөр
nullболушу мүмкүн. - Бир шилтемелүү түрдөгү өзгөрмөнүн мааниси башка бирөөгө берилсе, мааниге эмес, шилтемеге көчүрүлөт. Эки өзгөрмө бир эле жерге көрсөтө баштайт.
- Бир шилтемеге жасалган өзгөртүүлөр экинчисинде да көрүнөт, эгер ал бир эле объектке көрсөтсө.
- Шилтемелүү түрдөгү объекттердин эсеби garbage collector тарабынан башкарылат.
Шилтемелүү түрлөрдүн мисалдары:
- Стрингдер (
String) - Масивдер
- Колдонуучунун класстарынын объекттери
- Делегаттар (кей тилдерде)
Маанилүү түрлөрдөн айырмасы:
| Өзгөчөлүк | Маанилүү түрлөр | Шилтемелүү түрлөр |
|---|---|---|
| сактоо | Өзүнүн мааниси | Мазмунга шилтеме |
| көчүрүү | Өзүнүн мааниси көчүрүлөт | Шилтемеси көчүрүлөт |
| өзгөртүү | Көчүрмөдөгү өзгөртүүлөр оригиналга таасир этпейт | Бир шилтемеге жасалган өзгөртүүлөр экинчи аркылуу көрүнөт (эгер бир эле объектке көрсөтсө) |
| эс тутум | Стек аркылуу башкарылат | Хип аркылуу, garbage collector тарабынан тазаланат |
| мисалдар | int, float, bool, struct (кей тилдерде) |
String, Array, Object |
// C# мисалы
string s1 = "Hello"; // s1 "Hello" сапка шилтеме кылат
string s2 = s1; // s2 ошол эле шилтемеге шилтеме кылат
// Өзгөртүү башка шилтемеде көрүнбөйт,
// себеби жолдор C#да immutable.
// Өзгөртүү болсо жаңы жол түзүлүп, шилтеме кайра багытталат.
s1 = "World";
Console.WriteLine(s2); // "Hello" чыгарат
int[] arr1 = { 1, 2, 3 }; // arr1 массивге шилтеме кылат
int[] arr2 = arr1; // arr2 ошол эле шилтемеге шилтеме кылат
arr2[0] = 10; // arr2 аркылуу өзгөртүү
Console.WriteLine(arr1[0]); // 10 чыгарат, өзгөртүү arr1 аркылуу да көрүнөт
// Java мисалы
String s1 = "Hello"; // s1 "Hello" сапка шилтеме кылат
String s2 = s1; // s2 ошол эле шилтемеге шилтеме кылат
// Javaда жолдор immutable.
// Өзгөртүү болсо жаңы жол түзүлүп, шилтеме кайра багытталат.
s1 = "World";
System.out.println(s2); // "Hello" чыгарат
int[] arr1 = { 1, 2, 3 }; // arr1 массивге шилтеме кылат
int[] arr2 = arr1; // arr2 ошол эле шилтемеге шилтеме кылат
arr2[0] = 10; // arr2 аркылуу өзгөртүү
System.out.println(arr1[0]); // 10 чыгарат, өзгөртүү arr1 аркылуу да көрүнөт