C# difference between == and Equals()

前端 未结 17 1724
走了就别回头了
走了就别回头了 2020-11-21 06:56

I have a condition in a silverlight application that compares 2 strings, for some reason when I use == it returns false while .Equals()

17条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-21 07:56

    There is another dimension to an earlier answer by @BlueMonkMN. The additional dimension is that the answer to the @Drahcir's title question as it is stated also depends on how we arrived at the string value. To illustrate:

    string s1 = "test";
    string s2 = "test";
    string s3 = "test1".Substring(0, 4);
    object s4 = s3;
    string s5 = "te" + "st";
    object s6 = s5;
    Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s2), s1 == s2, s1.Equals(s2));
    
    Console.WriteLine("\n  Case1 - A method changes the value:");
    Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s3), s1 == s3, s1.Equals(s3));
    Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s4), s1 == s4, s1.Equals(s4));
    
    Console.WriteLine("\n  Case2 - Having only literals allows to arrive at a literal:");
    Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s5), s1 == s5, s1.Equals(s5));
    Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s6), s1 == s6, s1.Equals(s6));
    

    The output is:

    True True True
    
      Case1 - A method changes the value:
    False True True
    False False True
    
      Case2 - Having only literals allows to arrive at a literal:
    True True True
    True True True
    

提交回复
热议问题