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,如需转载请自行联系原作者