C# 中的 Equals() 与 ==

本教程将重点介绍 == 运算符和 C# 中的 Equals() 函数的区别和相似之处。

C# 中 == 运算符和 Equals() 函数之间的差异

== 运算符是 C# 中的比较运算符。== 运算符比较两个操作数的参考标识。另一方面,Equals() 函数比较 C# 中两个字符串变量的内容。通常,两者都用于比较两个值。但是,它们在不同的情况下可能会有不同的结果。以下代码示例将说明 == 运算符和 Equals() 函数均为 true 的情况。

using System;

namespace comparison
{
    class Program
    {
        static void Main(string[] args)
        {
            object var1 = "MMA";
            object var2 = var1;
            if (var1 == var2)
            {
                Console.WriteLine("== is true");
            }
            if (var1.Equals(var2))
            {
                Console.WriteLine("Equals is true");
            }
        }
    }
}

输出:

== is true
Equals is true

在上面的代码中,我们使用 var2 = var1 初始化了对象变量 var2。这意味着 var1var2 都在存储器中引用相同的身份。因此,== 运算符将导致 true 结果。由于它们内部都有相同的内容,因此 Equals() 函数也将给出 true

现在,我们将演示另一个场景,其中 == 运算符给出 false,但是 Equals() 函数返回 true 值。下面的代码示例中讨论了这种情况。

using System;

namespace comparison
{
    class Program
    {
        static void Main(string[] args)
        {
            object var1 = "MMA";
            char[] varc = { 'M', 'M', 'A' };
            object var2 = new string(varc);
            if(var1 == var2)
            {
                Console.WriteLine("== is true");
            }
            if (var1.Equals(var2))
            {
                Console.WriteLine("Equals is true");
            }
        }
    }
}

输出:

Equals is true

在上面的代码中,我们创建了字符数组 varc,并通过在字符串变量的构造函数中传递 varc,将其转换为对象变量 var2。这意味着 var1var2 都指向内存中的不同身份。== 运算符返回 false,因为它比较 var1var2 的引用标识。但是,Equals() 函数返回 true,因为它正在比较 var1var2 的内容。