Sobes.tech
Middle

C#-da sətirlərin müqayisəsi necə həyata keçirilir? Sətir obyektlərinin istinadları müqayisə olunurmu?

sobes.tech Süni İntellekt

AI-dan cavab

C# dilində sətirlərin müqayisəsi müxtəlif üsullarla həyata keçirilə bilər:

  1. Operator ==: Sətir literal və əgər sətirlər eyni məzmunu daşıyırsa, == operatoru true qaytaracaq. Digər referans tiplərdən fərqli olaraq, sətirlər üçün == operatoru məzmunu müqayisə etmək üçün aşırı yüklənmişdir, referanslar deyil.
  2. Metod Equals(): Bu metod da standart olaraq sətirlərin məzmununu müqayisə edir. Açıqlama ilə məzmun müqayisəsi üçün tövsiyə olunur və xüsusilə null ilə müqayisədə daha etibarlıdır. Böyük və kiçik hərfləri və mədəniyyəti nəzərə alan overloadlar mövcuddur.
  3. Metod String.Compare(): İki sətiri müqayisə edən və onların arasında sıralama əlaqəsini göstərən tam ədəd qaytaran statik metod. Müxtəlif müqayisə parametrlərini (böyük/kicik hərf, mədəniyyət və s.) təyin etməyə imkan verir.
  4. Metod String.CompareOrdinal(): Sətirləri bayt bayt müqayisə edir, mədəni xüsusiyyətləri nəzərə almadan.
  5. Metod String.CompareTo(): Nümunə metod olub, cari sətiri başqa sətir və ya obyektlə müqayisə edir. String.Compare()-yə bənzəyir, lakin sətir obyekti üzərində çağırılır.

Sətir obyektlərinin referansları adi məzmun müqayisəsində == və ya Equals() (istifadəçi tərəfindən xüsusi overload olmadan) ilə birbaşa müqayisə edilmir. Gəlin, sətirlər referans tipləri olsa da, ==Equals() xüsusi overload edilərək məzmunu dəqiq müqayisə etmək üçün istifadə olunur.

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

// Məzmun müqayisəsi
Console.WriteLine(str1 == str2);           // true (məzmun müqayisə edilir)
Console.WriteLine(str1.Equals(str2));    // true (məzmun müqayisə edilir)
Console.WriteLine(str1 == str3);           // true (məzmun müqayisə edilir)
Console.WriteLine(str1.Equals(str3));    // true (məzmun müqayisə edilir)

// Referansların müqayisəsi (açıq çevirmə və ya ReferenceEquals istifadə etməklə)
// Bu halda, str1 və str2 eyni obyektə istinad edə bilər
// sətirlərin internləşdirilməsi sayəsində. str3, ehtimal ki, ayrı bir obyekt olacaq.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // true və ya false ola bilər, JIT və CLR-ə bağlı
Console.WriteLine(object.ReferenceEquals(str1, str3)); // ehtimal ki, false