Sobes.tech
Middle

Was ist der Unterschied zwischen der Methode Equals und dem Operator == in C#?

sobes.tech KI

Antwort von AI

Der Unterschied liegt darin, wie sie Objekte vergleichen:

Methode/Operator Beschreibung Vergleich bei Referenztypen Vergleich bei Werttypen Überladung
Equals() Virtuelle Methode der Klasse object, kann überschrieben werden. Standardmäßig vergleicht es Referenzen (wenn nicht überschrieben). Vergleicht die Feldwerte (bei Überschreibung oder für eingebaute Typen). Möglich
== Überladbarer Operator. Standardmäßig vergleicht es Referenzen (bei Referenztypen). Standardmäßig vergleicht es Werte (bei Werttypen). Möglich

Beispiele:

// Vergleich von Referenztypen
string s1 = new string("hello");
string s2 = new string("hello");
string s3 = s1;

Console.WriteLine(s1.Equals(s2)); // True (bei Überschreibung von Equals in string)
Console.WriteLine(s1 == s2);     // False (Referenzen werden verglichen)
Console.WriteLine(s1 == s3);     // True (gleiche Referenzen)
// Vergleich von Werttypen
int a = 10;
int b = 10;
int c = 20;

Console.WriteLine(a.Equals(b)); // True (Wertvergleich)
Console.WriteLine(a == b);     // True (Wertvergleich)
Console.WriteLine(a == c);     // False (unterschiedliche Werte)

Es ist wichtig zu beachten, dass der Operator == für benutzerdefinierte Typen überladen werden kann, um sein Standardverhalten zu ändern. Die Methode Equals() kann ebenfalls überschrieben werden, um eine benutzerdefinierte Vergleichslogik zu implementieren. In den meisten Fällen wird empfohlen, Equals() für den Vergleich von Referenztypen zu verwenden, und für Werttypen entweder Equals() oder ==, abhängig vom Kontext und den Leistungsanforderungen.