A.Equals(B)和A==B的区别
2013-10-12 10:01 zhaodacheng 阅读(3649) 评论(0) 编辑 收藏 举报Equals 和 == 都是用于比较。
如果a和b都是值类型,则a.Equals(b) 和 a == b 结果相同,但是在引用类型是它们的行为是不同的:
string a = new string(new char[] {'d', 'a', 'n', 'c', 'e'});
string b = new string(new char[] {'d', 'a', 'n', 'c', 'e'});
object c = a;
object d = b;
Console.WriteLine (a==b);
Console.WriteLine (a.Equals(b));
Console.WriteLine (c==d);
Console.WriteLine (c.Equals(d));
输出结果:
True
True
False
True
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
"==" : 操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
"equals" : 操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
string是一种特殊的引用类型,使string对象用起来就像是值类型一样,string类型的==操作实际上是比较两个字符串的值是否相同。
所以:
Console.WriteLine (a==b); // 比较两个字符串的值 - 返回true
Console.WriteLine (a.Equals(b)); // 比较两个字符串的值 - 返回true
Console.WriteLine (c==d); // 比较两个对象的在堆中的地址是否相同 - 返回false
Console.WriteLine (c.Equals(d)); // 比较两个对象的所指向的内容是否相同 - 返回true
"==" : 操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
"equals" : 操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
string是一种特殊的引用类型,使string对象用起来就像是值类型一样,string类型的==操作实际上是比较两个字符串的值是否相同。
所以:
Console.WriteLine (a==b); // 比较两个字符串的值 - 返回true
Console.WriteLine (a.Equals(b)); // 比较两个字符串的值 - 返回true
Console.WriteLine (c==d); // 比较两个对象的在堆中的地址是否相同 - 返回false
Console.WriteLine (c.Equals(d)); // 比较两个对象的所指向的内容是否相同 - 返回true