黑马程序员技术交流社区
标题:
equal与referenceequal什么区别呀?
[打印本页]
作者:
左岸
时间:
2013-8-22 19:47
标题:
equal与referenceequal什么区别呀?
不太明白它们两个怎么用,什么情况下用哪个?
作者:
瞎猫馒头米田共
时间:
2013-8-22 21:21
由于Equals方法子类可以重写,所以通过Equals方法判断两个对象是否是同否是同一个对象已经不准确了。所以判断两个对象是否是同一个对象用:object.ReferenceEquals(对象1,对象2);返回一个bool值true则是同一对象,false则不是同一对象。
作者:
瞎猫馒头米田共
时间:
2013-8-22 21:24
奕string类型的类型的Equals()为例子,她重写了Equals()方法,反编译后你会看到:只要两个字符串的字符完全相同(调用了EqualsHelper())或者两个字符串是同一个对象(调用了Object.ReferenceEquals())都会返回true。
作者:
瞎猫馒头米田共
时间:
2013-8-22 21:24
以string类型的类型的Equals()为例子,她重写了Equals()方法,反编译后你会看到:只要两个字符串的字符完全相同(调用了EqualsHelper())或者两个字符串是同一个对象(调用了Object.ReferenceEquals())都会返回true。
作者:
许庭洲
时间:
2013-8-22 21:27
1. Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同,则 Equals返回 true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。
2. ReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false。
作者:
xinchenglong
时间:
2013-8-24 20:25
对于值类型,==和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
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2