Middle
Kako se vrše poređenja nizova u C#? Da li se porede reference objekata nizova?
sobes.tech АИ
Одговор од АИ
Upoređenje nizova u C# može se izvršiti na više načina:
- Operator
==: Za literale nizova i ako nizovi imaju isti sadržaj, operator==će vratititrue. Za razliku od drugih referentnih tipova, operator==za nizove je preopterećen da upoređuje sadržaj, a ne reference. - Metod
Equals(): Ovaj metod takođe poredi sadržaj nizova po defaultu. Preporučuje se za eksplicitno poređenje sadržaja i može biti pouzdaniji, posebno pri poređenju sanull. Postoje preopterećenja koja uzimaju u obzir osetljivost na velika/mala slova i kulturu. - Metod
String.Compare(): Statički metod koji poredi dva niza i vraća ceo broj koji ukazuje na odnos redosleda između njih. Omogućava da se navede različite parametre poređenja (osetljivost na velika/mala slova, kultura itd.). - Metod
String.CompareOrdinal(): Poredi nizove bajt po bajt, bez obzira na kulturne osobine. - Metod
String.CompareTo(): Metod instance koji poredi trenutni niz sa drugim nizom ili objektom. Slično jeString.Compare(), ali se poziva na objektu niza.
Referentne reference objekata nizova se ne porede direktno operatorom == ili metodom Equals() (bez korisnički definisanog preopterećenja) u običnom poređenju sadržaja. Iako su nizovi referentni tipovi, == i Equals() su posebno preopterećeni da tačno porede sadržaj.
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// Poređenje sadržaja
Console.WriteLine(str1 == str2); // true (poredi sadržaj)
Console.WriteLine(str1.Equals(str2)); // true (poredi sadržaj)
Console.WriteLine(str1 == str3); // true (poredi sadržaj)
Console.WriteLine(str1.Equals(str3)); // true (poredi sadržaj)
// Poređenje referenci (zahteva eksplicitni kast ili korišćenje ReferenceEquals)
// U ovom slučaju, str1 i str2 mogu da ukazuju na isti objekat
// zahvaljujući internovanju nizova. str3 će verovatno biti odvojen objekat.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // može biti true ili false u zavisnosti od JIT i CLR
Console.WriteLine(object.ReferenceEquals(str1, str3)); // verovatno false