当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ReferenceEquals, == , Equals 比较

ASP.NET
Asp.net利用JQuery弹出层加载数据代码
asp.net dataview做无限极分类的又一用法
asp.net ckeditor编辑器的使用方法
告别ADO.NET实现应用系统无缝切换的烦恼(总结篇)
asp.net 实现动态显示当前时间(不用javascript不考虑开销)
.net动态显示当前时间(客户端javascript)
asp.net 结合YUI 3.0小示例
asp.net 取消缓存相关问题说明
asp.net 计划任务管理程序实现,多线程任务加载
ASP.NET 跨页面传值方法
asp.net中url地址传送中文参数时的两种解决方案
Asp.net 菜单控件简洁版
asp.net jQuery Ajax用户登录功能的实现
asp.net SharpZipLib的压缩与解压问题
asp.net url重写后页面回传问题
asp.net与Discuz!NT整合集成实例教程
Discuz!NT 3与asp.net 整合的实例教程
测试控制台使用方法
.net 动态标题实现方法
asp.net *.ashx类型的文件使用说明

ASP.NET 中的 ReferenceEquals, == , Equals 比较


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 259 ::
收藏到网摘: n/a

1. ReferenceEquals, == , EqualsEquals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等。a) ReferenceEqualsReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false。(因为Box以后的对象总是不同的,hehe)b) ==是一个可以重载的二元操作符,可以用于比较两个对象是否相等。对于内置值类型,==判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。例如: Int a = 100; Double b =100; If(a == b) Console.WriteLine(“equal supports compare between different types!”);上面这段程序将会输出:equal supports compare between different types! 而对于用户定义的值类型,如果没有重载==操作符,==将是不能够使用的。例如:Struct Userstruct1;Userstruct1 a;Userstruct1 b;If(a == b)Console.WriteLine(“can == reach this far?”)上面的这段代码是不能够通过编译的。可以通过重载使==作用于用户定义的值类型。
对于引用类型,== 默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。但是.NET Framework中的类很多对==进行了重载,例如String类的==与Equals的行为相同,判断两个字符串的内容是否相等。所以在应用中,对于系统定义的引用类型建议不要使用==操作符,以免程序出现与预期不同的运行结果。 c) Equals 作为Object内置方法,Equals支持对于任意两个CTS对象的比较。Equals它有静态方法和可重载的一个版本,下面的程序片断解释了这两个方法的用法,int a = 5;int b = 5;If(Object.Equals(a ,b))// you can also use if(a.Equals(b)){ Console.WriteLine(“a is equal to b”);}事实上,这两个版本的结果完全相同,如果用户重载了Equals,调用的都是用户重载后的Equals。Equals的静态方法的好处是可以不必考虑用于比较的对象是否为null。 Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同(对于struct的每个成员都必须相同),则Equals返回true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。可以根据需要对Equals进行重载,例如String类的Equals用于判断两个字符串的内容是否相等。 StringBuilder a = new StringBuilder(); a.Append("the test a"); String s1 = a.ToString(); String s2 = "the test a"; if (s2 == s1) Console.WriteLine("== returns true"); if (Object.Equals(s2, s1)) { Console.WriteLine("equals returns true"); } if (Object.ReferenceEquals(s2, s1)) { Console.WriteLine("ReferenceEquals returns true"); }这个实例将输出:== returns trueequals returns true 注:对于String类,直接声明s1 = “the test a”的话,输出结果将包含"ReferenceEquals returns true",因为默认的,String对于声明的相同的字符串在堆上只保留一个Copy,所以s1与s2将会指向相同的Reference,