Middle
C# da satrlar qanday solishtiriladi? Satr ob'ektlarining manzillari solishtiriladimi?
sobes.tech AI
AIdan javob
C# daxturlarini solishtirishning bir nechta usullari mavjud:
==operatori: String literal va agar satrlar bir xil mazmunga ega bo'lsa,==operatoritrueqaytaradi. Boshqa referens tiplardan farqli o'laroq, satrlar uchun==operatori mazmunini solishtirish uchun yuklangan, referenslarni emas.Equals()metodi: Bu metod ham odatda satr mazmunini solishtiradi. U aniq mazmunni solishtirish uchun tavsiya etiladi vanullbilan solishtirishda yanada ishonchli bo'lishi mumkin. Har xil holatlarda katta-kichik harf va madaniyatni hisobga oluvchi overloadlar mavjud.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.String.CompareOrdinal()metodi: Satrlarni bayt bayt solishtiradi, madaniyat xususiyatlarini hisobga olmaydi.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