2016-06-24 3 views
0

같음 및 == 참조 평등을 확인하십시오. 하지만 왜 다르게 작동합니까? 여기같음 vs ==는 다르게 동작합니다.

Console.WriteLine(c == d); //False 
Console.WriteLine(c.Equals(d)); //True 

Console.WriteLine(cc == dd); //True 
Console.WriteLine(cc.Equals(dd));//True 

누군가 현장에서 일어나는 일을 설명 할 수 있습니까?

//https://blogs.msdn.microsoft.com/csharpfaq/2004/03/29/when-should-i-use-and-when-should-i-use-equals/ 
public void StringDoubleEqualsVsEquals() 
{ 
    // Create two equal but distinct strings 
    string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' }); 
    string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' }); 

    Console.WriteLine(a == b); //True 
    Console.WriteLine(a.Equals(b)); //True 

    // Now let's see what happens with the same tests but with variables of type object 
    object c = a; 
    object d = b; 

    Console.WriteLine(c == d); //False 
    Console.WriteLine(c.Equals(d)); //True 

    /*************************************************************************/ 
    Console.WriteLine(Environment.NewLine); 
    string aa = "1"; 
    string bb = "1"; 

    Console.WriteLine(aa == bb);//True 
    Console.WriteLine(aa.Equals(bb));//True 

    object cc = aa; 
    object dd = bb; 

    Console.WriteLine(cc.GetType());//System.String 
    Console.WriteLine(dd.GetType());//System.String 

    Console.WriteLine(cc == dd);//True 
    Console.WriteLine(cc.Equals(dd));//True 

    Console.ReadKey(); 
} 
+0

문자열'=='연산자가 값을 확인하고 참조가 아니라는 것을 확인합니다 https://msdn.microsoft.com/en-us/library/362314fe.aspx –

+0

'Equals'도'=='도 참조 용으로 테스트 할 수 없습니다 평등. – Lee

+0

문자열에 대한 ['=='은 값 비교를 수행하며 참조 비교는 수행하지 않습니다.] (https://msdn.microsoft.com/en-us/library/system.string.op_equality (v = vs.110) .aspx) –

답변

0

오퍼레이터 ==과 같은 Object.Equals indepentently는 구현 될 수있는 다른 것들이다. 일반적으로 Object.Equals은 값 동등성을 검사하기 위해 구현되며 ==은 참조 동등성을 검사합니다. 그러나 실제로 string의 연산자 ==도 값의 동일성을 검사합니다.

+0

나는 왜 '=='의'string' 과부하가 '문자열 풀링'때문에 * 값의 동일성을 검사한다고 생각하지 않습니다. 물론 * 모든 문자열이 제안 된대로 풀링/인턴 되었다면 (절대 그렇지 않은 경우) 절대 필요하지 않습니까? –

+0

내부 문자열 풀링이있는 경우가 아닙니까? 나는 거기에 있다고 믿었고, 따라서 문자열에 대해서는 참조 평등과 가치 평등이 일치했다. – Codor

+1

예, 명시 적으로 선언 된 문자열 리터럴에만 해당하므로 런타임에 생성 된 문자열에 대한 값이 동일해야합니다. 나는 그 대답의 논리를 실제로 따르지 않았다. –

관련 문제