string.Equals()
und ==
wirklich austauschbar?
Während sowohl die Operatoren string.Equals()
als auch ==
zum Vergleich von Objekten auf Gleichheit verwendet werden, verhalten sie sich unterschiedlich.
Zum Beispiel ist die Variable s
eine Zeichenfolge, die „Category“ enthält, und tvi.Header
ist der Titel des WPF TreeViewItem, das auch „Category“ enthält. Allerdings wird s == tvi.Header
als falsch ausgewertet, während s.Equals(tvi.Header)
als wahr ausgewertet wird.
Dieser Unterschied ergibt sich aus zwei wesentlichen Unterschieden:
Equals
ist polymorph, was bedeutet, dass seine Implementierung vom Laufzeittyp des Objekts abhängt. In diesem Fall wird die String-Implementierung verwendet, um die Werte zweier Strings zu vergleichen. ==
hingegen ist statisch typisiert und verwendet die entsprechende Implementierung basierend auf dem Kompilierzeittyp des verglichenen Objekts (in diesem Fall String und TreeViewItem.Header). Da diese Typen unterschiedlich sind, führt ==
einen Referenzvergleich durch und gibt false zurück. Equals
für ein Nullobjekt aufgerufen wird, wird eine NullReferenceException-Ausnahme ausgelöst, und ==
wenn beide Operanden null sind, ist das Ergebnis wahr. Um dieses Problem zu vermeiden, verwenden Sie object.Equals
anstelle von Equals
, wenn Sie mit potenziell Nullobjekten arbeiten. Zusammenfassend lässt sich sagen, dass die Operatoren string.Equals()
und ==
zwar ähnlich aussehen, es jedoch Unterschiede in den Typen und der Handhabung von Nullwerten gibt. Für genaue Wertevergleiche sollten Sie beim Vergleich von Zeichenfolgenwerten string.Equals()
verwenden und bei Verwendung des ==
-Operators auf Nullwerte achten.
Das obige ist der detaillierte Inhalt vonBeim Vergleich von Strings: Sind „string.Equals()' und „==' wirklich austauschbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!