A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 左岸 中级黑马   /  2013-8-22 19:47  /  1826 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不太明白它们两个怎么用,什么情况下用哪个?

5 个回复

倒序浏览
由于Equals方法子类可以重写,所以通过Equals方法判断两个对象是否是同否是同一个对象已经不准确了。所以判断两个对象是否是同一个对象用:object.ReferenceEquals(对象1,对象2);返回一个bool值true则是同一对象,false则不是同一对象。

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
奕string类型的类型的Equals()为例子,她重写了Equals()方法,反编译后你会看到:只要两个字符串的字符完全相同(调用了EqualsHelper())或者两个字符串是同一个对象(调用了Object.ReferenceEquals())都会返回true。
回复 使用道具 举报
以string类型的类型的Equals()为例子,她重写了Equals()方法,反编译后你会看到:只要两个字符串的字符完全相同(调用了EqualsHelper())或者两个字符串是同一个对象(调用了Object.ReferenceEquals())都会返回true。
回复 使用道具 举报
1. Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同,则 Equals返回 true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。
2. ReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false。
回复 使用道具 举报
对于值类型,==和Equal操作的作用是一样的,就是比较值类型的值是否相等。如果使用object.ReferenceEquals来比较值类型,输出永远都是FALSE,因为他们BOX之后在堆上的引用都不是同一个值。



对于引用类型来说,==,Equal,ReferenceEqual都是对引用对象是否相等的比较,而不是他们的值,除非重写函数进行值比较。



对于字符串这种特殊的值类型来说,==和Equal操作的作用是一样的,就是比较值类型的值是否相等。如果使用object.ReferenceEquals来比较值类型,就要看字符串是否是新实化的,否则字符串池的机制会使得对象的引用相等。



[html] view plaincopyprint?string x =new String(new char[]{'a'});  
string y = "a";  
string z = "a";  
Console.WriteLine(x.Equals(y));//ture  
Console.WriteLine(object.ReferenceEquals(x,y));//false  
Console.WriteLine(object.ReferenceEquals(z, y));//true  

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马