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