Heim >Backend-Entwicklung >C++ >String-Vergleich in C#: Wann sind „String.Equals()' und „==' austauschbar?

String-Vergleich in C#: Wann sind „String.Equals()' und „==' austauschbar?

Barbara Streisand
Barbara StreisandOriginal
2025-01-22 11:31:12590Durchsuche

String Comparison in C#: When Are `String.Equals()` and `==` Interchangeable?

Verwirrung beim C#-Stringvergleich: Sind die String.Equals()-Methode und der ==-Operator austauschbar?

In C# können Zeichenfolgenvergleiche manchmal zu unerwarteten Ergebnissen führen. Eine häufige Frage ist, ob sich die String.Equals()-Methode und der ==-Gleichheitsoperator genau gleich verhalten.

Bedenken Sie den folgenden Codeausschnitt:

<code class="language-csharp">string s = "Category";
TreeViewItem tvi = new TreeViewItem();
tvi.Header = "Category";

Console.WriteLine(s == tvi.Header); // false
Console.WriteLine(s.Equals(tvi.Header)); // true
Console.WriteLine(s == tvi.Header.ToString()); // true</code>

Obwohl s und tvi.Header denselben Wert „Kategorie“ enthalten, gibt der ==-Operator false zurück und die String.Equals()-Methode gibt true zurück. Dies wirft die Frage auf: Warum liefern diese beiden Vergleichsmethoden unterschiedliche Ergebnisse?

Hauptunterschiede zwischen

String.Equals() und ==

Es gibt zwei grundlegende Unterschiede zwischen den Operatoren

String.Equals() und ==:

  1. typspezifische Implementierung: Der ==-Operator vergleicht basierend auf dem Typ des Objekts zur Kompilierungszeit, während String.Equals() polymorph ist, was bedeutet, dass seine Implementierung von der Laufzeit des verglichenen Objekttyps abhängt .
  2. Nullwertbehandlung: Der ==-Operator löst beim Vergleich von Nullreferenzen keine Ausnahme aus, während der String.Equals()-Operator eine NullReferenceException-Ausnahme auslöst, wenn eines der Argumente null ist.

Beispiel, das den Unterschied zeigt

Um diese Unterschiede zu veranschaulichen, betrachten Sie den folgenden Code:

<code class="language-csharp">object x = new StringBuilder("hello").ToString();
object y = new StringBuilder("hello").ToString();

if (x.Equals(y)) // True

if (x == y) // False</code>

Obwohl x und y denselben Wert haben, gibt der ==-Operator false zurück, da der Vergleich auf der Grundlage des Typs des Objekts zur Kompilierungszeit (object) erfolgt, der unterschiedlich ist. Um einen korrekten Vergleich zu erhalten, muss das Objekt explizit in den entsprechenden Typ umgewandelt werden (in diesem Fall string).

<code class="language-csharp">string xs = (string)x;
string ys = (string)y;

if (xs == ys) // True</code>

Fazit

Während die Operatoren String.Equals() und == häufig synonym verwendet werden, ist es wichtig, die subtilen Unterschiede in ihrer Implementierung und der Handhabung von Nullwerten zu verstehen. Um zuverlässige und konsistente String-Vergleiche zu gewährleisten, wird generell die Verwendung der String.Equals()-Methode empfohlen, insbesondere beim Vergleich von Objekten unterschiedlichen Typs oder beim Umgang mit Nullreferenzen.

Das obige ist der detaillierte Inhalt vonString-Vergleich in C#: Wann sind „String.Equals()' und „==' austauschbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn