C# 中的 Equals() 與 ==

Muhammad Maisam Abbas 2021年4月29日
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 的內容。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相關文章 - Csharp Operator