Middle
C#'ta dizelerin karşılaştırılması nasıl yapılır? Dize nesnelerinin referansları karşılaştırılır mı?
sobes.tech yapay zeka
AI'dan gelen yanıt
C# dilinde dizelerin karşılaştırılması birkaç şekilde yapılabilir:
==Operatörü: Dizgi literaleri ve eğer dizeler aynı içeriğe sahipse,==operatörütruedöner. Diğer referans türlerinin aksine, dizeler için==operatörü içeriği karşılaştırmak üzere aşırı yüklenmiştir, referansları değil.Equals()Metodu: Bu metod da varsayılan olarak dizelerin içeriğini karşılaştırır. Açık içerik karşılaştırması için önerilir ve özelliklenullile karşılaştırmada daha güvenilirdir. Büyük/küçük harf duyarlılığı ve kültür dikkate alınabilir.String.Compare()Metodu: İki diziyi karşılaştıran ve sıralama ilişkisini belirten tam sayı döndüren statik bir metod. Farklı karşılaştırma parametreleri (büyük/küçük harf, kültür vb.) belirtebilir.String.CompareOrdinal()Metodu: Dizeleri bayt bayt karşılaştırır, kültürel özellikleri dikkate almaz.String.CompareTo()Metodu: Bir örnek metod olup, geçerli diziyi başka bir dizi veya nesne ile karşılaştırır.String.Compare()'ya benzer, ancak dizge nesnesi üzerinde çağrılır.
Dizelerin referansları **normal içerik karşılaştırmasında doğrudan == veya Equals() (kullanıcı tanımlı aşırı yükleme olmadan) ile karşılaştırılmaz. Dizeler referans türleri olmasına rağmen, kullanım kolaylığı için == ve Equals() özel olarak içeriği karşılaştırmak üzere aşırı yüklenmiştir.
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// İçerik karşılaştırması
Console.WriteLine(str1 == str2); // true (içerik karşılaştırılır)
Console.WriteLine(str1.Equals(str2)); // true (içerik karşılaştırılır)
Console.WriteLine(str1 == str3); // true (içerik karşılaştırılır)
Console.WriteLine(str1.Equals(str3)); // true (içerik karşılaştırılır)
// Referans karşılaştırması (açık dönüşüm veya ReferenceEquals kullanımı gerekir)
// Bu durumda, str1 ve str2 aynı nesneye işaret edebilir
// stringlerin internlenmesi nedeniyle. str3 büyük olasılıkla ayrı bir nesnedir.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // true veya false olabilir, JIT ve CLR'ye bağlı
Console.WriteLine(object.ReferenceEquals(str1, str3)); // büyük olasılıkla false