【.net 基礎01】ReferenceEquals,Equals,==的區別

【Code】spa

class Program
    {
        static void Main(string[] args)
        {
            object A = new Person { Name = "jack" };
            object B = new Person { Name = "jack" };

            int i1 = 1;
            int i2 = 1;

            /*
             * ReferenceEquals比較的是引用類型
             */
            // 兩個參數會自動裝箱,--引用不一樣,false
            Console.WriteLine(ReferenceEquals(i1, i2));
            // 引用不一樣,false
            Console.WriteLine(ReferenceEquals(A, B));

            /*
             * 若是Person類不重寫Equals方法,Equals方法效果與==同樣
             */
            // 引用類型,引用不一樣,false
            Console.WriteLine(A.Equals(B));
            // 值類型,值相同,true
            Console.WriteLine(i1.Equals(i2));
            // 引用不一樣,false
            Console.WriteLine(A == B);
            // 值類型,值相同,true
            Console.WriteLine(i1 == i2);

            Console.Read();
        }
    }

class Person
    {
        internal string Name;
    }

【ReferenceEquals】code

1.ReferenceEquals用於比較引用類型。blog

2.若是比較的是值類型(會自動裝箱),則返回false。string

 

【Equals】it

1.Equals用於比較值類型和引用類型。class

2.能夠被子類重寫。object

3.若是不重寫Equals方法,Equals方法效果與==同樣,引用類型比較引用,值類型比較值。引用

4.若是重寫Equals方法,須要重寫GetHashcode方法,當該類做爲鍵值對的鍵時,須要惟一的Hashcode,因此此時的GetHashcode方法須要被重寫。方法

 

【==】static

1.Equals用於比較值類型和引用類型。

2.引用類型比較引用,值類型比較值。

相關文章
相關標籤/搜索