두 개의 문자열을 비교 한 코드 샘플에는 성능 최적화가 있습니까?성능 - str_01 == str_02 vs (객체) str_01 == (객체) str_02
첫째 :
public static bool Compare_01()
{
string str_01 = "a";
string str_02 = "a";
if (str_01 == str_02)
return true;
else
return false;
}
2 :
public static bool Compare_02()
{
string str_01 = "a";
string str_02 = "a";
if ((object)str_01 == (object)str_02)
return true;
else
return false;
}
는 둘 다 true
을 반환합니다.
그들의 위원장 코드에서 다른 하나있다 :
1 :
IL_0001: ldstr "a"
IL_0006: stloc.0 // str_01
IL_0007: ldstr "a"
IL_000C: stloc.1 // str_02
IL_000D: ldloc.0 // str_01
IL_000E: ldloc.1 // str_02
IL_000F: call System.String.op_Equality
2 :
IL_0001: ldstr "a"
IL_0006: stloc.0 // str_01
IL_0007: ldstr "a"
IL_000C: stloc.1 // str_02
IL_000D: ldloc.0 // str_01
IL_000E: ldloc.1 // str_02
IL_000F: ceq
내가 System.String이 뭔가를 발견
public static bool Equals(String a, String b) {
// Here
if ((Object)a==(Object)b) {
return true;
}
// ****
if ((Object)a==null || (Object)b==null) {
return false;
}
if (a.Length != b.Length)
return false;
return EqualsHelper(a, b);
}
그럼 왜 둘 다'true'를 반환합니까? 그들의 참조는 달라야한다. –
@ Mohamadshiralizadeh 나는 이미 말했다 : "string interning". 코드에 내장 된 (그리고'ldstr'를 통해로드 된) 모든 상수 문자열은 자동적으로 인턴됩니다. 다음은 반대 사례입니다. http://pastie.org/9789644. 여러분의 예제에서 IL은'ldstr'을 사용한다는 것에주의하십시오. –
오른쪽. 내가 참조.. –