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

本文详细解析了C#中ReferenceEquals与Equals方法的区别及使用场景,包括它们如何处理引用类型与值类型的比较,并探讨了在不同情况下的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【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.引用类型比较引用,值类型比较值。

转载于:https://www.cnblogs.com/fb-boy/p/3460986.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值