C#中对象的四种相等比较方式

C#中对象的四种相等比较方式如下:
1.ReferenceEquals(object o1, object o2):比较两个对象的引用,引用相同返回true,否则返回false,同为null是返回true;
2.Equals(object o):虚拟Equals方法,比较引用,可以重写比较值;
3.Equals(object o1, object o2):静态Equals方法,先判断两个对象是否为空,如果都不为空,则调用虚拟Equals方法;
4.object1 == object2:比较运算符,比较引用,可以重写;

注意:值类型比较时应采用重写后的Equals方法,使用ReferenceEquals进行值类型比较时总是返回false,因为两个值类型需要分别装箱到对象中,是不同的引用

TestEquals.cs:

 
01.using System; 
02.  
03.namespace Magci.Test.Operators 
04.{ 
05.    public class SomeClass 
06.    { 
07.          
08.    } 
09.  
10.    public class TestEquals 
11.    { 
12.        public static void Main() 
13.        { 
14.            SomeClass s1 = new SomeClass(); 
15.            SomeClass s2 = new SomeClass(); 
16.            SomeClass s3 = s1; 
17.  
18.            //ReferenceEquals比较两个对象的引用,同为null是返回true 
19.            Console.WriteLine("ReferenceEquals(s1, s2) : " + ReferenceEquals(s1, s2)); 
20.            Console.WriteLine("ReferenceEquals(null, null) : " + ReferenceEquals(null, null)); 
21.            Console.WriteLine("ReferenceEquals(s1, null) : " + ReferenceEquals(s1, null)); 
22.              
23.            //虚拟Equals方法,比较引用,可以重写比较值 
24.            Console.WriteLine("s1.Equals(s2) : " + s1.Equals(s2)); 
25.            Console.WriteLine("s1.Equals(s3) : " + s1.Equals(s3)); 
26.              
27.            //静态Equals方法先比较两个对象是否为空,如果都不为空,则调用虚拟Equals方法 
28.            Console.WriteLine("SomeClass.Equals(s1, s2) : " + SomeClass.Equals(s1, s2)); 
29.            Console.WriteLine("SomeClass.Equals(null, null) : " + SomeClass.Equals(null, null)); 
30.            Console.WriteLine("SomeClass.Equals(s1, null) : " + SomeClass.Equals(s1, null)); 
31.              
32.            //比较运算符比较引用,可以重写 
33.            Console.WriteLine("s1 == s2 : " + (s1 == s2)); 
34.            Console.WriteLine("s1 == s3 : " + (s1 == s3)); 
35.  
36.            //值类型比较 
37.            Console.WriteLine("1.Equals(1) : " + 1.Equals(1)); 
38.            //ReferenceEquals进行值类型比较时总是返回false,因为两个值类型需要分别装箱到对象中,是不同的引用 
39.            Console.WriteLine("ReferenceEquals(1, 1) : " + ReferenceEquals(1, 1)); 
40.        } 
41.    } 

42.}

     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360722,如需转载请自行联系原作者






上一篇:【错误记录】Flutter 组件报错 ( No Directionality widget found. | RichText widgets require a Directionality )


下一篇:边缘计算与智能制造发展势头旺盛,会是制造业的未来吗?