首页 / 软件开发 / .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();
收藏该网址