可能重复:和.Equals()
之间的C#区别==
在我的日常代码例程中,我经常使用它们,但实际上并不知道它们彼此之间有多么不同.
if(String.Equals(str1, str2))
Run Code Online (Sandbox Code Playgroud)
和
if(str1 == str2)
Run Code Online (Sandbox Code Playgroud)
它们实际上完全一样.
public static bool operator ==(string a, string b)
{
return Equals(a, b);
}
Run Code Online (Sandbox Code Playgroud)
所以==打电话给Equals.
public static bool Equals(string a, string b)
{
return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}
Run Code Online (Sandbox Code Playgroud)
EqualsHelper 是一种不安全的方法:
更新 它的作用是,它使用整数指针遍历字符并将它们作为整数进行比较(一次4byte).它一次完成10个,然后一个一个.
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2034 次 |
| 最近记录: |