C#中对象的四种相等比较方式
2010-06-30 04:41
316 查看
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:
[b]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.}
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:
[b]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.}
相关文章推荐
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- .Net(C#)中,对象的相等比较问题
- Flex的四种判断对象类型的方式 as instanceof is typeof比较
- C#的对象相等比较问题
- .Net(C#)中,对象的相等比较问题
- C#学习,对象的相等比较
- [C#] C#中对象相等性比较方法的区别
- C# Distinct使用,支持对象的相等比较
- .Net(C#)中,对象的相等比较问题
- C#使用Equals()方法比较两个对象是否相等的方法
- 关于ViewPager、ViewFilpper、ViewFlow,Gallery四种实现水平滑动方式的比较
- 生成唯一性订单约束的四种方式锁(对象锁,类锁、分布式redis锁,分布式Zookeeper锁)
- C#相等比较用法总结
- java中四种操作xml方式的比较(摘抄)
- HashMap 四种同步方式的性能比较
- ASP.NET四种页面导航方式之比较与选择
- [Java] 四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较
- jsp九大内置对象、四种作用域、跳转方式
- Java中创建对象的四种方式
- 逐步认识C#四种判断相等的方法<转载>