C#-String-Vergleich: der Unterschied zwischen string.Equals()
und ==
In C# sehen die string.Equals()
-Methode und der ==
-Operator sehr ähnlich aus, es gibt jedoch subtile Unterschiede zwischen ihnen, die zu unerwarteten Ergebnissen führen können.
Polymorphismus und Laufzeittypen
Ein wesentlicher Unterschied ist der Polymorphismus. Equals()
ist eine polymorphe Methode, was bedeutet, dass ihre Implementierung basierend auf dem Laufzeittyp des Zielobjekts überschrieben werden kann. Im Gegensatz dazu wird die Implementierung von ==
ausschließlich durch die Typen der Operanden zur Kompilierungszeit bestimmt. Dieser Unterschied wird deutlich, wenn Objekte verschiedener Typen verglichen werden, da die Equals()
-Implementierung der Klasse des Zielobjekts aufgerufen wird und ==
einen Referenzvergleich basierend auf dem Typ zur Kompilierungszeit durchführt.
Nullwerte und Ausnahmen
Ein weiterer Unterschied besteht in der Art und Weise, wie Nullwerte behandelt werden. Wenn Equals()
für ein Nullobjekt aufgerufen wird, wird eine NullReferenceException
-Ausnahme ausgelöst, während ==
einfach false
zurückgibt. Dies kann beim Vergleich von Objekten, die möglicherweise null sind, zu einem Problem werden. Um dieses Problem zu vermeiden, können Sie die Methode object.Equals()
verwenden, die vor dem Aufruf von Equals()
nach Nullwerten sucht.
Beispiel
Bedenken Sie den folgenden Code:
<code class="language-csharp">object x = new StringBuilder("hello").ToString(); object y = new StringBuilder("hello").ToString(); // Equals() 将比较值,考虑运行时类型 if (x.Equals(y)) // True // == 将执行引用比较,而不管运行时类型 if (x == y) // False</code>
In diesem Beispiel vergleicht x
die Werte von y
und Equals()
korrekt, obwohl x
und y
unterschiedliche Objekttypen sind. ==
führt jedoch einen Referenzvergleich durch und gibt false
zurück, da es sich nicht um Instanzen desselben Zeichenfolgenobjekts handelt.
Fazit
Obwohl Equals()
und ==
ähnlich aussehen, unterscheidet sich ihr Verhalten in wesentlichen Punkten. Das Verständnis dieser Unterschiede ist von entscheidender Bedeutung, um unerwartete Zeichenfolgenvergleiche zu vermeiden und eine ordnungsgemäße Objektgleichheitsprüfung sicherzustellen.
Das obige ist der detaillierte Inhalt vonString.Equals() vs. == in C#: Sind sie wirklich gleichwertig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!