ReferenceEquals, == , Equals 比较

2016-01-29 13:19 5 1 收藏

ReferenceEquals, == , Equals 比较,ReferenceEquals, == , Equals 比较

【 tulaoshi.com - ASP.NET 】

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,

来源:http://www.tulaoshi.com/n/20160129/1489727.html

延伸阅读
在Java里面object equals()的概念是两个引用指向的是同一个对象,即两者指向同一个对象,才equals()。但是也有特例,比如说一些原始类型,integer,string等属于值相等。就是说,值相等,也就equals()了。实际上,他们都改写了object的equals()方法。但是”类型安全”的值类不需要改写equals()。 还有,当我们当前的类有特定的”相等”...
代码如下: public class equalsDemo {      public static void main(String[] args){          /*使用==来判断两个变量是否相等时,如果两个变量时基本数据类型的           变量时,且都是数值类型是,则只要两个变量的值相等...
在经验丰富的 Java 开发人员看来,.NET 可能与 Java 平台很相似,它们都提供了一种创建应用程序的结构化方法,都有编译为中间代码的语言,都为应用程序开发提供了一个大型 API 库。但实际上,.NET 的核心有一套与 Java 平台不同的目标。 从概念上讲,Java 是两样东西:Java 平台(运行时和 API)和 Java 语言。Java 平台的用途是支持用 Java ...
好久不来,竟然多了个我最喜欢的东东,忍不住手痒,发他一帖,不到之处,各位多指教 :) 我觉得 python 比 perl 强的地方主要有五个 1, 稳定 试过用 perl 写的几个大一点的程序,运行一段吧时间后就崩溃,而且打印出的信息太简短,基本没什么帮助。据说 python 是从不崩溃的,假如真的这样就太好了,呵呵 2, 多线程支...
功能要求如下: 排序算法比较: shellsort, quicksort, heapsort, mergesort 的算法实现 , 对同样数据集的排序时间比较。 源代码: # include stdio.h # include time.h # define MAXSIZE 2000 typedef struct{ int key[MAXSIZE]; int length; }list; long int compCount; long int shiftCount; void menu(...

经验教程

474

收藏

65
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部