これは、値の等価性 (equal メソッド) と参照の等価性 (== 演算子) によるものです。equal メソッドは値をチェックし、同じ == が参照をチェックするためです。
== https://referencesource.microsoft.com/の文字列クラス内で利用可能なコードをオーバーライドする演算子
これで理解しやすくなりました。 equal メソッドには、文字列クラス自体からの実装とオブジェクト クラスからの実装の 2 つの実装があります。また、いくつかの基本的なコードを実行し、ベンチマークを理解しようとします。
以下の結果を共有しています どこか間違っている場合は、修正またはアドバイスしてください。3 つのケースがあり、すべてのケースで同じコードを実行した結果がこれです。
ケース 1:ここでは文字列を使用しています。2 つの文字列を比較する equal メソッドで、両方の文字列が同じ値を持っています。文字列.equals(a,b)
1 回目:5608195 ティック
2 回目:5529387 ティック
3 回目: 5622569 ティック
合計ティック: 16760151
ケース 2:ここでは文字列を使用しています。2 つの文字列を比較する equal() メソッド (オーバーロードされたもの) で、両方の文字列が同じ値を持っています。a.equals(b)
1 回目: 6738583 ティック
2 回目の実行: 6452927 ティック
3 回目の実行: 7168897 ティック
合計ティック数=20360407
ケース 3:ここでは == 演算子を使用して 2 つの文字列を比較していますが、両方の文字列が同じ値を持っています。a==b
1 回目: 6652151 ティック
2 回目の実行: 7514300 ティック
3 回目の実行: 7634606 ティック
合計ティック数=21801057
class Program
{
private static int count;
static string a = "abcdef";
static string b = "abcdef";
static void Main(string[] args)
{
for (int j = 1; j <= 3; j++)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 1; i <= 1000; i++)
{
checkString();
}
sw.Stop();
Console.WriteLine(sw.ElapsedTicks);
}
Console.ReadLine();
}
public static void checkString()
{
for (int i = 1; i <= 100000; i++)
{
if (a==b)
count++;
}
}
}