Middle
Hoe worden strings vergeleken in C#? Worden de referenties van string-objecten vergeleken?
sobes.tech AI
Antwoord van AI
Vergelijking van strings in C# kan op verschillende manieren worden gedaan:
- Operator
==: Voor string-literals en als de strings dezelfde inhoud hebben, geeft de operator==trueterug. In tegenstelling tot andere referentietypen is de==operator voor strings overschreven om de inhoud te vergelijken, niet de referenties. - Methode
Equals(): Deze methode vergelijkt ook standaard de inhoud van de strings. Het wordt aanbevolen voor expliciete inhoudsvergelijkingen en kan betrouwbaarder zijn, vooral bij vergelijking metnull. Er zijn overloads die rekening houden met hoofdlettergevoeligheid en cultuur. - Methode
String.Compare(): Een statische methode die twee strings vergelijkt en een geheel getal retourneert dat de relatie tussen hen aangeeft. Hiermee kunnen verschillende vergelijkingsparameters worden gespecificeerd (hoofdlettergevoeligheid, cultuur, enz.). - Methode
String.CompareOrdinal(): Vergelijkt de strings byte voor byte, zonder rekening te houden met culturele kenmerken. - Methode
String.CompareTo(): Een instantie-methode die de huidige string vergelijkt met een andere string of object. Het lijkt opString.Compare(), maar wordt aangeroepen op een string-object.
De referenties van string-objecten worden niet direct vergeleken met de operator == of de methode Equals() (zonder aangepaste overload) bij een normale inhoudsvergelijking. Hoewel strings referentietypen zijn, zijn == en Equals() speciaal overschreven om precies de inhoud te vergelijken.
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// Inhoudsvergelijking
Console.WriteLine(str1 == str2); // true (vergelijking van inhoud)
Console.WriteLine(str1.Equals(str2)); // true (vergelijking van inhoud)
Console.WriteLine(str1 == str3); // true (vergelijking van inhoud)
Console.WriteLine(str1.Equals(str3)); // true (vergelijking van inhoud)
// Referentievergelijking (vereist expliciete conversie of gebruik van ReferenceEquals)
// In dit geval kunnen str1 en str2 naar hetzelfde object verwijzen
// dankzij string interning. str3 zal waarschijnlijk een apart object zijn.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // kan true of false zijn afhankelijk van JIT en CLR
Console.WriteLine(object.ReferenceEquals(str1, str3)); // waarschijnlijk false