【.net 基础01】ReferenceEquals,Equals,==的区别

【Code】

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】

1.ReferenceEquals用于比较引用类型。

2.如果比较的是值类型(会自动装箱),则返回false。

 

【Equals】

1.Equals用于比较值类型和引用类型。

2.可以被子类重写。

3.如果不重写Equals方法,Equals方法效果与==一样,引用类型比较引用,值类型比较值。

4.如果重写Equals方法,需要重写GetHashcode方法,当该类作为键值对的键时,需要唯一的Hashcode,所以此时的GetHashcode方法需要被重写。

 

【==】

1.Equals用于比较值类型和引用类型。

2.引用类型比较引用,值类型比较值。

posted @ 2013-12-06 11:00  Wiki-Locas  阅读(314)  评论(0编辑  收藏  举报