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和==的覆写和重载,以提高性能和针对性分析。