关于c#:使用String.Equals(str1,str2)和str1 == str2之间的区别是什么

Whats the difference between using String.Equals(str1,str2) and str1 == str2

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C# difference between == and .Equals()

在我的日常代码例行程序中,我经常使用它们,但真的不知道它们之间到底有什么不同。

1
if(String.Equals(str1, str2))

1
if(str1 == str2)


(更新)

它们实际上是完全一样的。

1
2
3
4
public static bool operator ==(string a, string b)
{
    return Equals(a, b);
}

所以==Equals

1
2
3
4
public static bool Equals(string a, string b)
{
    return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}

EqualsHelper是一种不安全的方法:

更新它使用整数指针循环字符,并将它们作为整数进行比较(一次4字节)。它一次10次,然后一次1次。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private static unsafe bool EqualsHelper(string strA, string strB)
{
    int length = strA.Length;
    if (length != strB.Length)
    {
        return false;
    }
    fixed (char* chRef = &strA.m_firstChar)
    {
        fixed (char* chRef2 = &strB.m_firstChar)
        {
            char* chPtr = chRef;
            char* chPtr2 = chRef2;
            while (length >= 10)
            {
                if ((((*(((int*) chPtr)) != *(((int*) chPtr2))) || (*(((int*) (chPtr + 2))) != *(((int*) (chPtr2 + 2))))) || ((*(((int*) (chPtr + 4))) != *(((int*) (chPtr2 + 4)))) || (*(((int*) (chPtr + 6))) != *(((int*) (chPtr2 + 6)))))) || (*(((int*) (chPtr + 8))) != *(((int*) (chPtr2 + 8)))))
                {
                    break;
                }
                chPtr += 10;
                chPtr2 += 10;
                length -= 10;
            }
            while (length > 0)
            {
                if (*(((int*) chPtr)) != *(((int*) chPtr2)))
                {
                    break;
                }
                chPtr += 2;
                chPtr2 += 2;
                length -= 2;
            }
            return (length <= 0);
        }
    }
}


它们是完全一样的。以下是ildasm的目的==

1
2
  IL_0002:  call       bool System.String::Equals(string,
                                              string)

另请阅读文档:http://msdn.microsoft.com/en-us/library/system.string.op_equality.aspx它说

This operator is implemented using the Equals method