C#においては、等価演算子・不等価演算子がオーバーロードされていない限り、両辺がstringでないとコンパイルエラーとなります(タイプセーフ)。 一方、Equalsメソッドは引数にObject型をとるオーバーロードも用意されているため、stringと異なる型の比較を行おうとしてもコンパイルエラーにはなりません。
等価演算子・不等価演算子・Equalsメソッドでの文字列と他の型との比較
using System;
class Sample {
static void Main()
{
var s = "16";
var i = 16;
// 等価演算子では、stringとintの比較はコンパイルエラーとなる
Console.WriteLine(s == i); // error CS0019: 演算子 '==' を 'string' と 'int' 型のオペランドに適用することはできません。
// Equalsメソッドでは、stringとintの比較はコンパイルエラーにはならない
// また実行時にも例外はスローされない
// 異なる型同士の比較となるので、結果はFalseとなる
Console.WriteLine(String.Equals(s, i)); // False
}
}
等価演算子とEqualsメソッドではパフォーマンスに若干の違いはありますが、どちらを使うのが妥当かは状況により異なるので、両者の違いを十分に考慮して選択する必要があります。