ホームページ > バックエンド開発 > C++ > `string.Equals()` と `==` 演算子は文字列比較において常に等価ですか?

`string.Equals()` と `==` 演算子は文字列比較において常に等価ですか?

Susan Sarandon
リリース: 2025-01-22 11:46:14
オリジナル
826 人が閲覧しました

Are `string.Equals()` and the `==` Operator Always Equivalent for String Comparison?

文字列比較: 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 を返します。これは、stvi.Header が等しいとみなされないことを示しています。対照的に、Equals() メソッドは等しいことを示す true を返します。

主な違い

結果の違いは、2 つの比較メカニズム間の 2 つの大きな違いから生じます。

  • ポリモーフィズム: Equals() メソッドはポリモーフィックであり、ターゲット オブジェクトのクラスの実装を受け取ります。一方、== 演算子はコンパイル時の型情報に依存します。たとえば、sStringBuilder として宣言され、後で文字列に変換された場合でも、== はそれを tvi.Header オブジェクトとして StringBuilder と比較します。
  • NullException: null オブジェクトに対して Equals() を呼び出すと NullReferenceException が返されますが、== 演算子は単に false を返します。この問題を回避するには、オブジェクトの 1 つが空であっても、object.Equals() メソッドを使用してください。

結論

string.Equals() 演算子と == 演算子は通常、同様の結果を生成できますが、これらは独自の利点と制限がある異なる比較メカニズムです。これらの違いを理解することは、文字列比較を正しく処理する堅牢なコードを作成するために重要です。

以上が`string.Equals()` と `==` 演算子は文字列比較において常に等価ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート