什么时候应该使用 ==?什么时候应该使用 Equals?

2016-01-29 13:05 41 1 收藏

什么时候应该使用 ==?什么时候应该使用 Equals?,什么时候应该使用 ==?什么时候应该使用 Equals?

【 tulaoshi.com - ASP.NET 】


Equals 方法只是在 System.Object 中定义的一个虚拟方法,它由任何选择执行该任务的类所重写。== 运算符是一个可由类重载的运算符,该类通常具有恒等行为。
对于未重载 == 的引用类型,该运算符会比较两个引用类型是否引用同一对象,而这恰好是 System.Object 中的 Equals 实现所做的工作。
对于未重载 == 的值类型,该运算符会比较这两个值是否"按位"相等,即是否这两个值中的每个字段都相等。当您对值类型调用 Equals 时,仍然会发生这一情况,但这一次,该实现是由 ValueType 提供的,并且使用反射进行比较,从而使比较速度比特定于类型的实现慢很多。
到此为止,二者是如此类似。二者之间的主要区别是多态。运算符被重载而不是被重写,这意味着除非编译器知道调用更为具体的版本,否则它只是调用恒等版本。为阐明这一点,请看下面这个示例:using System;public class Test{static void Main(){ // Create two equal but distinct strings string a = new string(new char[] {'h', 'e', 'l', 'l', 'o'}); string b = new string(new char[] {'h', 'e', 'l', 'l', 'o'}); Console.WriteLine (a==b); Console.WriteLine (a.Equals(b)); // Now let's see what happens with the same tests but // with variables of type object object c = a; object d = b; Console.WriteLine (c==d); Console.WriteLine (c.Equals(d)); }}
结果是:TrueTrueFalseTrue
第三行是 False,原因在于编译器不知道 c 和 d 的内容都是字符串引用,因而只能调用 == 的非重载版本。因为它们是对不同字符串的引用,所以恒等运算符返回 False。

那么,应该如何区别使用这些运算符呢?我的准则是:对于几乎所有引用类型,当您希望测试相等性而不是引用一致性时,请使用 Equals。例外的情况是字符串 - 使用 == 比较字符串确实会使事情简单得多,而且代码可读性更好,但是 您需要记住,该运算符的两端都必须是类型字符串表达式,才能使比较正常进行。
对于值类型,我通常使用 ==,因为除非值类型本身包含引用类型(这种情况极为罕见),否则是恒等还是相等的问题无关紧要。

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

延伸阅读
孕前补充叶酸的作用 叶酸又称维生素B,是人体 健康 的必要成分。它对孕妇尤其重要,因为缺少叶酸易导致新生儿先天畸形。由于传统饮食习惯中叶酸损失太大,因此,专家建议应在 食物 中添加叶酸。 德国每年约有350个新生儿患有严重的大脑和脊柱畸形,即所谓 神经 管缺陷,病因是孕妇体内缺少叶酸。柏林的罗...
标签: 备孕 怀孕 育儿
叶酸应该什么时候吃 1、孕前和孕期都要补,那个时期最关键? 胎儿期内,脑的发育最早也最为迅速;孕早期(3~6周)正是胎儿中枢神经系统生长发育的关键时期。 妊娠第4周末胚胎就形成了原始脑泡,虽然在第8周时胎儿的身长只有3公分左右,体重也只增加2克多,但是这时候他的脑细胞增殖迅速,最易受到致畸因素的影响。如果在此关键时候补充...
宝宝在刚出牙的时候,牙龈会感到非常的痒痛。这个时候如果给宝宝用婴儿磨牙棒,可以缓解宝宝的不适感,使宝宝的牙龈得到锻炼,并且能够锻炼宝宝的抓握和咀嚼能力。 什么时候使用婴儿磨牙棒 当家长们发现宝宝开始流口水比较多,而且宝宝总喜欢咬东西,常会将手指伸到嘴里去咬,这时候可以给宝宝吃婴儿磨牙棒了,不管宝宝是否开始长...
你的身体需要排毒了吗 简单清扫——随时随地 快速调理 如果只是偶尔睡眠不好,早起双腿浮肿,又或者情绪烦躁,身体上这样的小负担,只要稍微用点心思就可以轻松甩掉。简单闻一闻精油,就可以代谢出体内毒素。 用柠檬水消解浮肿:每天起床时,立刻喝一杯加了新鲜柠檬片的热水,它是最好的排毒水,也是最好的酸碱平衡水,能很快...
标签: 孕前
教你孕育俊男靓女的秘诀 现代科学认为,人类的一切正常性状或疾病,除意外事故外,都是遗传、环境或两者相互作用的结果。而对精、卵质量产生影响的,也仍然离不开遗传和环境两大因素。据美国遗传学家魏尔啸统计,婴儿出生缺陷的原因,遗传因素占25%、环境因素占10%、两种因素相互作用及原因不明占65%。历年来,在研究如何避免出生缺陷、提高下...

经验教程

953

收藏

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