Mögliches Duplikat:
C# Unterschied zwischen==
und .Equals()
In meiner täglichen Code-Routine verwende ich sie häufig, aber ich weiß nicht genau, wie sie sich voneinander unterscheiden.
if(String.Equals(str1, str2))
und
if(str1 == str2)
Mögliches Duplikat:
C# Unterschied zwischen==
und .Equals()
In meiner täglichen Code-Routine verwende ich sie häufig, aber ich weiß nicht genau, wie sie sich voneinander unterscheiden.
if(String.Equals(str1, str2))
und
if(str1 == str2)
Sie sind in der Tat genau dasselbe.
public static bool operator ==(string a, string b)
{
return Equals(a, b);
}
así que ==
ruft das Equals
.
public static bool Equals(string a, string b)
{
return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}
EqualsHelper
ist eine unsichere Methode:
UPDATE Was es tut, es Schleifen durch die Zeichen mit Integer-Zeigern und vergleicht sie als Ganzzahlen (4 Byte zu einer Zeit). Es tut es 10 zu einer Zeit und dann ein zu einer Zeit.
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);
}
}
}
Sie sind absolut identisch. Hier ist, was ildasm zeigt für ==
IL_0002: call bool System.String::Equals(string,
string)
Lesen Sie auch die Dokumentation: http://msdn.microsoft.com/en-us/library/system.string.op_equality.aspx Dort heißt es
Dieser Operator wird mit der Equals-Methode implementiert
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.