Sobes.tech
Middle

C# da satrlar qanday solishtiriladi? Satr ob'ektlarining manzillari solishtiriladimi?

sobes.tech AI

AIdan javob

C# daxturlarini solishtirishning bir nechta usullari mavjud:

  1. == operatori: String literal va agar satrlar bir xil mazmunga ega bo'lsa, == operatori true qaytaradi. Boshqa referens tiplardan farqli o'laroq, satrlar uchun == operatori mazmunini solishtirish uchun yuklangan, referenslarni emas.
  2. Equals() metodi: Bu metod ham odatda satr mazmunini solishtiradi. U aniq mazmunni solishtirish uchun tavsiya etiladi va null bilan solishtirishda yanada ishonchli bo'lishi mumkin. Har xil holatlarda katta-kichik harf va madaniyatni hisobga oluvchi overloadlar mavjud.
  3. String.Compare() metodi: Statik metod bo'lib, ikki satrni solishtiradi va ularning tartib aloqasini ko'rsatadigan butun sonni qaytaradi. Turli solishtirish parametrlarini (kattalik, madaniyat va boshqalar) belgilash mumkin.
  4. String.CompareOrdinal() metodi: Satrlarni bayt bayt solishtiradi, madaniyat xususiyatlarini hisobga olmaydi.
  5. String.CompareTo() metodi: Obyektga chaqiriladigan, hozirgi satrni boshqa satr yoki ob'ekt bilan solishtiradigan metod. String.Compare() ga o'xshash, lekin satr ob'ekti ustida chaqiriladi.

Satr ob'ektlarining referenslari oddiy mazmun solishtirishda == yoki Equals() (foydalanuvchi tomonidan yuklangan bo'lmagan) bilan to'g'ridan-to'g'ri solishtirilmaydi. Garchi satrlar referens tiplari bo'lsa-da, == va Equals() maxsus yuklangan, ayniqsa mazmunni aniq solishtirish uchun.

string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });

// Mazmunni solishtirish
Console.WriteLine(str1 == str2);           // true (mazmuni solishtiriladi)
Console.WriteLine(str1.Equals(str2));    // true (mazmuni solishtiriladi)
Console.WriteLine(str1 == str3);           // true (mazmuni solishtiriladi)
Console.WriteLine(str1.Equals(str3));    // true (mazmuni solishtiriladi)

// Referenslarni solishtirish (aniq konvertatsiya yoki ReferenceEquals ishlatish talab etiladi)
// Bu holda, str1 va str2 bir xil ob'ektga ishora qilishi mumkin
// satrlarning intern qilinishi tufayli. str3, ehtimol, alohida ob'ekt bo'ladi.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // true yoki false bo'lishi mumkin, JIT va CLR ga bog'liq
Console.WriteLine(object.ReferenceEquals(str1, str3)); // ehtimol, false