比较对象的相对性

考虑在处理类和结构的实例时,“相等”意味着什么?

 

1.比较引用类型的相等性

有四种不同的方法来比较对象的想等性

// --------  比较引用类型的相等性  --------
 //
 // ------- 有四种不同的方法来比较对象的想等性  -----
            
object obj1 = new object();
object obj2 = obj1;//new object();
            
//静态方法,测试两个引用是否引用类的同一个实例,判断的是内存中的相同地址
object.ReferenceEquals(obj1, obj2); //false
object.ReferenceEquals(null, null); //true
object.ReferenceEquals(obj1, obj1); //true

//object基类中的虚方法,与ReferenceEquals版本的实现相同,比较的是的内存地址
//因为是虚方法,所以在派生类对象中可以进行重写,按对象值进行比较
//重写方法时,不能抛出异常
obj1.Equals(obj2);

//静态方法
//如果两个参数都为null,则返回true
//如果两个参数,其中一个为null,则返回false
//如果两个参数都不为null,则调用上面虚拟版本的Equals(obj)方法
object.Equals(obj1,obj2);

//比较运算符 ==
// == 默认进行的也是内存地址比较
// string 类重写了 == 运算符,string 进行的是值比较
if (obj1 == obj2) { }

  

 比较值类型的相等性

 比较引用类型的四种方法,也可以用来比较值类型,但有部分区别

// object.ReferenceEquals(obj1, obj2) 用于比较引用,即内存地址,但是值类型需要装箱,所以结果永远false。
// Equals 用于比较值, 结构体的Equals会对每个字段值进行比较
// 如果值类型的某个字段是引用类型,则最好重写Equals,因为引用类型默认比较内存地址

  

 

 

比较 Equals()、ReferenceEquals()、==

posted on 2017-07-21 11:26  萨尔  阅读(153)  评论(0编辑  收藏  举报

导航