Equals()与ReferenceEquals()
equals,System.ValueType重载了System.Object的Equals方法,用于实现对实例数据的判等。
ReferenceEquals,对值类型应用ReferenceEquals将永远返回false。
ReferenceEquals,对值类型应用ReferenceEquals将永远返回false。
Equals,主要有两种方法,如下
public virtual bool Equals(object obj);
public static bool Equals(object objA, object objB);
一种是虚方法,默认为引用地址比较;而静态方法,如果objA是与objB相同的实例,或者如果两者均为空引用,或者如果objA.Equals(objB)返回true,则为true;否则为false。.NET的大部分类都重写了Equals方法,因此判等的返回值要根据具体的重写情况决定。
ReferenceEquals,静态方法,只能用于引用类型,用于比较两个实例对象是否指向同一引用地址。
==,默认为引用地址比较,通常进行实现了==的重载,未重载==的引用类型将比较两个对象是否引用地址,等同于引用类型的Equals方法。因此,很多的.NET类实现了对==操作符的重载,例如System.String的==操作符就是比较两个字符串是否相同。而==和equals方法的主要区别,在于多态表现上,==是被重载,而Equals是重写。
有必要在自定义的类型中,实现对Equals和==的重写或者重载,以提高性能和针对性分析。