C# 文字列比較: string.Equals()
と ==
C# では、string.Equals()
メソッドと ==
演算子は非常によく似ていますが、両者の間には微妙な違いがあり、予期しない結果を引き起こす可能性があります。
ポリモーフィズムとランタイム型
主な違いはポリモーフィズムです。 Equals()
はポリモーフィック メソッドです。つまり、その実装はターゲット オブジェクトの実行時の型に基づいてオーバーライドできることを意味します。対照的に、==
の実装は、オペランドのコンパイル時の型によってのみ決定されます。この違いは、ターゲット オブジェクトのクラスの Equals()
実装が呼び出され、 ==
がコンパイル時の型に基づいて参照比較を実行するため、異なる型のオブジェクトを比較するときに明らかになります。
Null 値と例外
もう 1 つの違いは、null 値の処理方法です。 Equals()
が null オブジェクトに対して呼び出された場合、NullReferenceException
例外がスローされますが、==
は単に false
を返します。これは、null の可能性があるオブジェクトを比較するときに問題になる可能性があります。この問題を回避するには、object.Equals()
を呼び出す前に null 値をチェックする Equals()
メソッドを使用できます。
例
次のコードを考えてみましょう:
<code class="language-csharp">object x = new StringBuilder("hello").ToString(); object y = new StringBuilder("hello").ToString(); // Equals() 将比较值,考虑运行时类型 if (x.Equals(y)) // True // == 将执行引用比较,而不管运行时类型 if (x == y) // False</code>
この例では、x
と y
が異なるタイプのオブジェクトであっても、Equals()
は x
と y
の値を正しく比較します。ただし、==
は同じ文字列オブジェクトのインスタンスではないため、参照比較を実行して false
を返します。
結論
Equals()
と ==
は似ていますが、動作は重要な点で異なります。これらの違いを理解することは、予期しない文字列比較を回避し、オブジェクトの等価性チェックを適切に行うために重要です。
以上がC# における String.Equals() と == : これらは本当に同等ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。