首页 > 其他 > 详细

判断两个对象是否相同

时间:2017-02-23 20:52:08      阅读:131      评论:0      收藏:0      [点我收藏+]

判断两个对象是否相同,关键是看这两个对象是否指向内存中的同一块内存。

先看例子:

技术分享
 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             #region 判断两个对象是否相同:看是否指向同一块内存
 6             Person p1 = new Person()
 7             {
 8                 Name = "张三",
 9                 Age = 18
10             };
11 
12             Person p2 = new Person()
13             {
14                 Name = "张三",
15                 Age = 18
16             };
17             #endregion
18 
19             Console.ReadKey();
20         }
21     }
22 
23     public class Person
24     {
25         public string Name { get; set; }
26         public int Age { get; set; }
27     }
View Code

 

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Person p1 = new Person()
 6             {
 7                 Name = "张三",
 8                 Age = 18
 9             };
10 
11             Person p2 = new Person()
12             {
13                 Name = "张三",
14                 Age = 20
15             };
16             Console.ReadKey();
17         }
18     }
19 
20     public class Person
21     {
22         public string Name { get; set; }
23         public int Age { get; set; }
24     }

调试--》窗口--》即时,分别输入&p1,&p2,发现两个对象的内存地址不一样,说明这是两个不同的对象,只是这两个对象存储的内容相同。如下:

技术分享
1 &p1
2 0x0694ecc8
3     *&p1: {0}
4 &p2
5 0x0694ecc4
6     *&p2: {0}
View Code

 案例二、

技术分享
 1 Person p1 = new Person();
 2             p1.Name = "张三";
 3             p1.Age = 20;
 4 
 5             Person p2 = new Person();
 6             p2.Name = "张三";
 7             p2.Age = 20;
 8 
 9             Console.WriteLine(p1.Equals(p2));//false
10             Console.WriteLine(p1==p2);//false
11 
12             string[] names1 = new string [] {"张三","李四","王五" };
13             string[] names2 = new string[] { "张三", "李四", "王五" };
14             Console.WriteLine(names1.Equals(names2));//false
15             Console.WriteLine(names1 == names2);//false
16 
17             string str1 = new string(new char[] { 1,2,3});
18             string str2 = new string(new char[] { 1, 2, 3 });
19             Console.WriteLine(str1.Equals(str2));//true
20             Console.WriteLine(str1 == str2);//true
View Code

分别输出  false,false/false,false/true,true.

通过上面第一个案例,我们知道equals和==都是比较对象的地址,所以前面两个都是false很好理解,为何变成string类型后就不对了呢?原因是,所有的对象都继承了object,而object对象都有equals方法,但是不同的对象实现不一样。string的equals方法,重新后是判断对象的内容是否相同。而字符串中==内部也是调用equals实现的。所以用equals或者==来判断两个对象是否相同不准确。永远准确的方法是 Object.ReferenceEquals();

这里我们可以让案例二中的第一个例子输出true,只要在person类中重写equals方法就行了。代码如下:

 

技术分享
 1  Person p1 = new Person();
 2             p1.Name = "张三";
 3             p1.Age = 20;
 4 
 5             Person p2 = new Person();
 6             p2.Name = "张三";
 7             p2.Age = 20;
 8 
 9             Console.WriteLine(p1.Equals(p2));
10 
11 
12 
13 
14 public class Person
15     {
16         public string Name { get; set; }
17         public int Age { get; set; }
18 
19         public override bool Equals(Object obj)
20         {
21             Person p = obj as Person;
22             if (p != null)
23             {
24                 if (p.Name==this.Name&&p.Age== this.Age)
25                 {
26                     return true;
27                 }
28                 else
29                 {
30                     return false;
31                 }
32             }
33             else
34             {
35                 return false;
36             }  
37         }
38     }
View Code

输出true;

 

判断两个对象是否相同

原文:http://www.cnblogs.com/wesley168/p/6435161.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!