Middle
Wie erfolgt der Vergleich von Strings in C#? Werden die Referenzen der String-Objekte verglichen?
sobes.tech KI
Antwort von AI
Der Vergleich von Strings in C# kann auf verschiedene Weisen erfolgen:
- Operator
==: Für String-Literale und wenn die Strings den gleichen Inhalt haben, gibt der Operator==truezurück. Im Gegensatz zu anderen Referenztypen ist der Operator==für Strings überladen, um den Inhalt zu vergleichen, nicht die Referenzen. - Methode
Equals(): Diese Methode vergleicht ebenfalls standardmäßig den Inhalt der Strings. Sie wird für einen expliziten Inhaltsvergleich empfohlen und ist zuverlässiger, insbesondere bei Vergleichen mitnull. Es gibt Überladungen, die die Groß-/Kleinschreibung und Kultur berücksichtigen. - Methode
String.Compare(): Eine statische Methode, die zwei Strings vergleicht und einen ganzzahligen Wert zurückgibt, der die Beziehung zwischen den Strings angibt. Sie erlaubt die Angabe verschiedener Vergleichsparameter (Groß-/Kleinschreibung, Kultur usw.). - Methode
String.CompareOrdinal(): Vergleicht die Strings Byte für Byte, ohne kulturelle Besonderheiten zu berücksichtigen. - Methode
String.CompareTo(): Eine Instanzmethode, die die aktuelle String mit einer anderen String oder einem Objekt vergleicht. Sie ist ähnlich wieString.Compare(), wird aber auf einem String-Objekt aufgerufen.
String-Objekt-Referenzen werden bei normalem Vergleich nicht direkt mit == oder Equals() (ohne benutzerdefinierte Überladung) verglichen. Obwohl Strings Referenztypen sind, sind == und Equals() speziell überladen, um den Inhalt genau zu vergleichen.
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// Inhaltsvergleich
Console.WriteLine(str1 == str2); // true (Inhalt wird verglichen)
Console.WriteLine(str1.Equals(str2)); // true (Inhalt wird verglichen)
Console.WriteLine(str1 == str3); // true (Inhalt wird verglichen)
Console.WriteLine(str1.Equals(str3)); // true (Inhalt wird verglichen)
// Referenzvergleich (erfordert explizite Umwandlung oder Verwendung von ReferenceEquals)
// In diesem Fall können str1 und str2 auf dasselbe Objekt verweisen
// aufgrund des String-Internings. str3 ist wahrscheinlich ein separates Objekt.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // kann true oder false sein, abhängig von JIT und CLR
Console.WriteLine(object.ReferenceEquals(str1, str3)); // wahrscheinlich false