首页 > 代码库 > 区别和认识C#中四个判等函数
区别和认识C#中四个判等函数
概要
本方介绍.net如何判断两个对象是否相等
.Net有四个判等函数
1)Object.ReferenceEquals
2)Object.Equals
3)对象实例的Equals
4)==操作符
这四个函数之间有细微的关系,改变其中一个函数的实现会影响到其他函数的操作结果。
Object.ReferenceEquals静态方法
首先要说的是Object.ReferenceEquals和Object.Equals这两个静态函数,对于它们俩来说,是不需要进行重写的,因为它们已经完成它们所要得做的操作。
对于Object.ReferenceEquals这个静态函数,函数形势如下:
public static bool ReferenceEquals( object left, object right );
这个函数就是判断两个引用类型对象是否指向同一个地址。有此说明后,就确定了它的使用范围,即只能对于引用类型操作。那么对于任何值类型数据操作,即使是与自身的判别,都会返回false。这主要因为在调用此函数的时候,值类型数据要进行装箱操作,分别装箱:
int n = 10; Object.ReferenceEquals( n, n );
这是因为对于n这个数据装箱两次,而每次装箱后的地址有不同,而造成Object.ReferenceEquals( n, n )的结果永远为false。
Object.Equals静态方法
方法内部完成的工作:
public static void Equals( object left, object right ) { // Check object identity if( left == right ) return true; // both null references handled above if( ( left == null ) || ( right == null ) ) return false; return left.Equals( right ); }
也就是说,Object.Equals()判等需要3个步骤。
第1步:对象所属类型的==操作符执行结果;
第2 步:对象是否空引用(同第1步一样,使用对象所属类型的==操作符判断);
第3步:对象所属类型的Equals()方法;
因此,类型是否实现了自身的Equals()成为Object.Equals()返回什么结果的重要因素。
等价规则
等价的意义就是自反、对称、传递。
1)所谓自反,即:a==a;
2)所谓对称:即:a==b; 则:b==a;
3)所谓传递:即:a==b; b==c; 则: a==c;
理解了等价的意义,那么实现判等函数就要满足等价规则。
Equlas()可以重载的对象实例方法
参考:
http://blog.csdn.net/zhoufoxcn/article/details/1326904
区别和认识C#中四个判等函数