C# 中 ==和equals的區別
阿新 • • 發佈:2019-05-31
不想說太多,直接上程式碼,這兩個就沒什麼聯絡,有自己獨立的規則。比較其實不利於記憶。
下面是測試程式碼
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