首页 / 软件开发 / .NET编程技术 / Equals、RefrenceEquals和==的区别
Equals、RefrenceEquals和==的区别2011-01-06 博客园 秋水萧萧今天无意看到一篇有关Equals和==的区别的帖子,帖子中间简单的说成是比较引用和比较值,这样的理解很有问题。看了看MSDN,总结如下。从两个方面来说说这三者的区别。先给出一个类和一个结构:public class RefrenceClass
{
public int X
{get;set;}
public string Y
{get;set;}
}
public struct ValueStruct
{
public int x;
public string y;
}
1.引用类型的比较看看以下这段代码会输出何种结果RefrenceClass c1 = new RefrenceClass();
c1.X = 1;
c1.Y = "OK";
RefrenceClass c2 = new RefrenceClass();
c2.X = 1;
c2.Y = "OK";
RefrenceClass c3 = new RefrenceClass();
c3.X = 1;
c3.Y = "OK!";
RefrenceClass c4 = new RefrenceClass();
c4.X = 2;
c4.Y = "OK";
RefrenceClass c5 = new RefrenceClass();
c5=c1;
c5.X = 2;
RefrenceClass c6 = c1;
Console.WriteLine(ReferenceEquals(c1,c2).ToString());
Console.WriteLine(ReferenceEquals(c1,c3).ToString());
Console.WriteLine(ReferenceEquals(c1,c4).ToString());
Console.WriteLine(ReferenceEquals(c1,c5).ToString());
Console.WriteLine(ReferenceEquals(c1,c6).ToString());
Console.WriteLine();
Console.WriteLine(Equals(c1,c2).ToString());
Console.WriteLine(Equals(c1,c3).ToString());
Console.WriteLine(Equals(c1,c4).ToString());
Console.WriteLine(Equals(c1,c5).ToString());
Console.WriteLine(Equals(c1,c6).ToString());
Console.WriteLine();
Console.WriteLine(c1.Equals(c2).ToString());
Console.WriteLine(c1.Equals(c3).ToString());
Console.WriteLine(c1.Equals(c4).ToString());
Console.WriteLine(c1.Equals(c5).ToString());
Console.WriteLine(c1.Equals(c6).ToString());
Console.WriteLine();
Console.WriteLine(c1==c2);
Console.WriteLine(c1==c3);
Console.WriteLine(c1==c4);
Console.WriteLine(c1==c5);
Console.WriteLine(c1==c6);
Console.WriteLine();