C# 中有两种不同的相等:引用相等和值相等。
◎值相等是大家普遍理解的意义上的相等:它意味着两个对象包含相同的值。 ◎引用相等意味着要比较的不是两个对象,而是两个对象引用,且两者引用的是同一个对象。
Equals:
下面的语句中,x、y 和 z 表示不为 null 的对象引用。 * 除涉及浮点型的情况外,x.Equals(x) 都返回 true。 * x.Equals(y) 返回与 y.Equals(x) 相同的值。 * 如果 x 和 y 都为 NaN,则 x.Equals(y) 返回 true。 * 当且仅当 x.Equals(z) 返回 true 时,(x.Equals(y) && y.Equals(z)) 才返回 true。 * 只要不修改 x 和 y 引用的对象,对 x.Equals(y) 的相继调用将返回相同的值。 * x.Equals(null) 返回 false。
==:
对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。 对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。 对于 string 类型,== 比较字符串的值。
Equals与==的区别
"==" : 操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
"equals" : 操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。 而字符串是一个特殊的引用型类型,在C#语言中,重载了string 对象的很多方法方法(包括equals()方法),使string对象用起来就像是值类型一样。 实例 C# 代码 复制 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Person { privatestring name; publicstring Name { get{ return name; } set{ name = value; } } public Person(string name) { this.name = name; } } class program { staticvoid Main(string[] args) { string a =newstring(newchar[] ...); string b =newstring(newchar[] { 'h', 'e', 'l', 'l', 'o' }); Console.WriteLine(a == b); Console.WriteLine(a.Equals(b)); object g = a; object h = b; Console.WriteLine(g == h); Console.WriteLine(g.Equals(h)); Person p1 =new Person("jia"); Person p2 =new Person("jia"); Console.WriteLine(p1 == p2); Console.WriteLine(p1.Equals(p2)); Person p3 =new Person("jia"); Person p4 = p3; Console.WriteLine(p3 == p4); Console.WriteLine(p3.Equals(p4)); Console.ReadLine(); } } }转载于:https://www.cnblogs.com/hoosway/p/3600709.html