C#比較兩個對象是否爲同一個對象

引:https://www.cnblogs.com/zhangyuhao/p/10489461.html

 

兩個對象是否爲同一個對象:是看兩個對象是否指向堆中的同一塊內存。

1、使用object.ReferenceEquals()

複製代碼

class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person();
            p1.Name = "Mark";
            Person p2 = new Person();
            p2.Name = "Marl";
            Person p3 = p1;
            Console.WriteLine(object.ReferenceEquals(p1,p2));
            Console.WriteLine(object.ReferenceEquals(p1,p3));

        }
        class Person
        {
            public string Name { get; set; }
        }
    }
   //結果:false。
        true

複製代碼

2.使用object.equals()

複製代碼

class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person();
            p1.Name = "Mark";
            Person p2 = new Person();
            p2.Name = "Marl";
            Person p3 = p1;
            Console.WriteLine(p1.Equals(p2));
            Console.WriteLine(p1.Equals(p3));

        }
        class Person
        {
            public string Name { get; set; }
        }
    }
  //結果同上

複製代碼

3、使用==    得到同樣的結果。

目前來看,這三個方法都能判斷兩個對象是否爲同一個對象。但是:

複製代碼

static void Main(string[] args)
        {
            string s1 = new string(new char[] { 'a', 'b' });
            string s2 = new string(new char[] { 'a', 'b' });
            Console.WriteLine(s1==s2);//true
            Console.WriteLine(s1.Equals(s2));//true
            Console.WriteLine(object.ReferenceEquals(s1,s2));//false
        }

複製代碼

這兩個s1,s2是兩個不同的對象,因爲new了兩次,在堆中存在兩塊不同的內存。

總結:

Equals:內部是判斷兩個對象中的值是否一樣。

==:內部還是調用的equals方法,所以應該同上。

所以用第一種。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章