C#中==、Equals、ReferenceEquals的区别是什么

1、== 运算符html

 

一、静态相等符号,对应存在的!=,这个符号是一个能够重载的二元操做符,能够用于比较两个对象是否相等。spa

二、它会根据须要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。orm

三、对于引用对象比较其引用(string引用类型除外,string是比较值)htm

四、对于值类型比较其值对象

五、某些内置的引用类型重载了==符号,例如string就重载==,使其比较的不是两个字符串的引用,而是比较的两个字符串字面量是否相等。继承



2、Equals内存

 

一、用于比较两个对象的引用是否相等。字符串

二、然而对于值类型,类型相同(不会进行类型自动转换),而且数值相同(对于struct的每一个成员都必须相同),则Equals返回 true,不然返回false。get

三、对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时 候才返回true。原型

四、能够根据须要对Equals进行重载



3、ReferenceEquals


一、Object的静态方法,比较两对象的引用是否相等,值类型和引用类型都是同样。

二、不能在继承类中重写该方法。原型是:public static bool ReferenceEquals(object objA, object objB);FCL已经帮咱们实现。它就是比较引用指向的内存地址是否同样。

三、对于2个值类型,ReferenceEquals永远都为false,由于使用ReferenceEquals(object a,object b)方法后值类型被从新装箱为新的引用类型实例,天然不会引用相等。

四、对于2个引用类型,ReferenceEquals则会比较它们是否指向同一地址。



参考资料:C#中==、Equals、ReferenceEquals的区别是什么  http://www.studyofnet.com/news/1188.html

相关文章
相关标签/搜索