文字列比較: string.Equals()
メソッドと ==
演算子の違い
プログラミングでは、文字列比較では string.Equals()
メソッドと ==
演算子が同じ意味で使用できるとよく考えられます。しかし、この先入観を覆す興味深い謎が生じます。
問題分析
次のコードを考えてみましょう:
<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>
予期せぬことに、==
演算子は最初の比較で false
を返します。これは、s
と tvi.Header
が等しいとみなされないことを示しています。対照的に、Equals()
メソッドは等しいことを示す true
を返します。
主な違い
結果の違いは、2 つの比較メカニズム間の 2 つの大きな違いから生じます。
Equals()
メソッドはポリモーフィックであり、ターゲット オブジェクトのクラスの実装を受け取ります。一方、==
演算子はコンパイル時の型情報に依存します。たとえば、s
が StringBuilder
として宣言され、後で文字列に変換された場合でも、==
はそれを tvi.Header
オブジェクトとして StringBuilder
と比較します。 Equals()
を呼び出すと NullReferenceException
が返されますが、==
演算子は単に false
を返します。この問題を回避するには、オブジェクトの 1 つが空であっても、object.Equals()
メソッドを使用してください。 結論
string.Equals()
演算子と ==
演算子は通常、同様の結果を生成できますが、これらは独自の利点と制限がある異なる比較メカニズムです。これらの違いを理解することは、文字列比較を正しく処理する堅牢なコードを作成するために重要です。
以上が`string.Equals()` と `==` 演算子は文字列比較において常に等価ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。