string.Equals()
演算子と ==
演算子の違いC# における文字列の等価性については、しばしば疑問が生じます。 ==
演算子と string.Equals()
メソッドは本当に同じ意味で使用できるのでしょうか?それぞれの違いを詳しく見て、用途を明確にしてみましょう。
大きな違いの 1 つは、ポリモーフィズムの処理です。 string.Equals()
このメソッドはポリモーフィックです。つまり、その実装は派生クラスでオーバーライドできることを意味します。この柔軟性により、さまざまなタイプのオブジェクトが一貫した方法で等価比較を処理できるようになります。
対照的に、==
演算子はコンパイル時のオペランドの型に依存します。したがって、コンパイル時の種類が異なる 2 つのオブジェクト (たとえば、文字列と WPF TreeViewItem.Header) を比較する場合、値の比較ではなく、参照の比較が実行されます。
もう 1 つの重要な違いは、どちらかのオペランドが空の場合に何が起こるかです。空のオブジェクトに対して string.Equals()
メソッドを呼び出そうとすると、NullReferenceException
例外がスローされます。ただし、2 つの null 参照を比較する場合、==
演算子は true
を返します。
この問題を回避するには、null 値を適切に処理する object.Equals()
メソッドを使用できます。このメソッドは、どちらかのオペランドが空の場合は false
を返し、両方のオペランドが空か等しい場合は true
を返します。
要約すると、string.Equals()
メソッドと ==
演算子は同じ意味で使用すべきではありません。前者はポリモーフィックで値の比較を行いますが、後者はコンパイル時の型情報に依存して参照比較を実行します。さらに、object.Equals()
メソッドは、オブジェクトが等しいかどうかを比較するための一貫した null 安全な方法を提供します。
以上がC# の `string.Equals()` と `==` 演算子の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。