Sobes.tech
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 аркылуу да көрүнөт