日期:2014-05-19  浏览次数:20705 次

问 ==和equals区别
rt

------解决方案--------------------
==指引用是否相同
equals()指的是值是否相同


字符串是特殊的~
字符串是对象,新建个“abc”的字符串的时候,系统会先到内存中找,看是否存在‘a’,‘b’,‘c’,如果存在,引用,不存在新建
所以你打出来的是true

------解决方案--------------------
在 C# 中它们的区别非常小,大多数情况下可以认为它们是相同的...

Equals 的默认实现仅支持引用相等,但派生类可重写此方法以支持值相等。

默认情况下,运算符 == 通过判断两个引用是否指示同一对象来测试引用是否相等,因此引用类型不需要实现运算符 == 就能获得此功能。当类型不可变时,意味着实例中包含的数据不可更改,此时通过重载运算符 == 来比较值是否相等而不是比较引用是否相等可能会很有用,因为作为不可变的对象,只要它们具有相同的值,就可以将它们看作是相同的。建议不要在非不可变类型中重写运算符 ==。

若要检查引用相等性,应使用 ReferenceEquals。若要检查值相等性,应使用 == 或 Equals。
------解决方案--------------------
==对于内置值类型,判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false.
而对于用户定义的值类型,如果没有重载==操作符,==将是不能够使用的。例如:struct
默认对于引用类型,用于比较两个引用类型的对象是否是对于同一个对象的引用
Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同(对于struct的每个成员都必须相同),则Equals返回true,否则返回false;
默认对于引用类型,用于比较两个引用类型的对象是否是对于同一个对象的引用