等于vs ==的行为不同

  • 本文关键字:vs 等于 c#
  • 更新时间 :
  • 英文 :


等效,==检查参考等效性。但是它的行为不同?这里

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();
}

运算符==Object.Equals如此不同的是可以独立实现的。通常,在==检查引用相等性时,实现Object.Equals以检查值平等。但是,string上的操作员==实际上还检查了值等值。

最新更新