C#中类型比较Equals()、ReferenceEquals()和==的区别

C#中类型比较有很多方法,比较常用的有Equals()、ReferenceEquals()和==三种常见方法,其中核心方法为Equals(),Equals()是System.object提供的虚方法,用用于比较两个对象是否有相同的引用的地址,但.net FrameWork中很多的类型都是实现了对Equals()的覆盖,所以有时候我们在进行字符串比较时,用了Equals()方法进行两个字符串的比较,其实是比较字符串是否相同,而不是比较字符串的引用地址相同。还有要注意的,值类型也是重写了Equas()l,以实现对实例数据的判断,这三个方法各有区别,应多加注意。

!、值类型判断

一:Equals,System.ValueType重载了System.object的Equals的方法,用于实现对实例数据的判断。

二:ReferenceEquals:对值类型的判断将永远返回false。

三:==,未重载的==的值类型,将比较两个值是否按位相等。

!、引用类型判断

一:ReferenceEquals(),静态方法,只能用于引用类型,用于比较两个实例对象是否指向同一个引用的地址。

二:==,默认是地址的比较,通常进行实现==的重载,未重载的==的引用类型将比较对象的引用地址,等同引用类型的Equals方法。因此,很多.net类实现了对==操作符的重载,例如System.String的==就是比较两个字符串是否相同的,而==和Equals的方法的区别,在于多态表现上,==是被重载,而Equal是被覆写。

 

注意:在自定义类型中,有必要实现对Equals和==的覆写和重载,以提高性能和针对性分析。

posted @ 2012-12-28 11:15  技术_菜鸟  阅读(848)  评论(0编辑  收藏  举报