1. 程式人生 > >C# 中 ==和equals的區別

C# 中 ==和equals的區別

不想說太多,直接上程式碼,這兩個就沒什麼聯絡,有自己獨立的規則。比較其實不利於記憶。

下面是測試程式碼

        private static void Main(string[] args)
        {
            Console.WriteLine("--equals和==的區別--");
            Console.WriteLine("1、對於值型別的資料");
            Console.WriteLine();
            Console.WriteLine("1.1、型別和數學上的值都相同的數");
            Console.WriteLine($"(int)1 == (int)1 的結果是:{(int)1 == (int)1}");
            Console.WriteLine($"(int)1).Equals((int)1) 的結果是:{((int)1).Equals((int)1)}");
            Console.WriteLine();

            Console.WriteLine("1.2、對於型別不同但是數學上值相同的數");
            Console.WriteLine($"(int)1 == (long)1 的結果是:{(int)1 == (long)1}");
            Console.WriteLine($"((int)1).Equals((long)1 的結果是:{((int)1).Equals((long)1)}");
            Console.WriteLine();

            Console.WriteLine("2、對於引用型別的資料");
            Console.WriteLine();
            Console.WriteLine("2.1、在1.1的基礎上轉化為object再比較");
            Console.WriteLine($"(object)(int)1 == (object)(int)1 的結果是:{(object)(int)1 == (object)(int)1}");
            Console.WriteLine($"((object)(int)1).Equals((object)(int)1 的結果是:{((object)(int)1).Equals((object)(int)1)}");
            Console.WriteLine();

            Console.WriteLine("2.2、在1.2的基礎上轉化為object再比較");
            Console.WriteLine($"(object)(int)1 == (object)(long)1 的結果是:{(object)(int)1 == (object)(long)1}");
            Console.WriteLine($"((object)(int)1).Equals((object)(long)1 的結果是:{((object)(int)1).Equals((object)(long)1)}");
            Console.WriteLine();

            Console.ReadKey();
        }

 

列印如下:

--equals和==的區別--
1、對於值型別的資料

1.1、型別和數學上的值都相同的數
(int)1 == (int)1 的結果是:True
(int)1).Equals((int)1) 的結果是:True

1.2、對於型別不同但是數學上值相同的數
(int)1 == (long)1 的結果是:True
((int)1).Equals((long)1 的結果是:False

2、對於引用型別的資料

2.1、在1.1的基礎上轉化為object再比較
(object)(int)1 == (object)(int)1 的結果是:False
((object)(int)1).Equals((object)(int)1 的結果是:True

2.2、在1.2的基礎上轉化為object再比較
(object)(int)1 == (object)(long)1 的結果是:False
((object)(int)1).Equals((object)(long)1 的結果是:F