C# Equals方法和==有什么区别
2021/9/11 17:06:17
本文主要是介绍C# Equals方法和==有什么区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
开发工具:VS2019
一、关于这两个比较,需要从值类型和引用类型两方面来说
(A)先说值类型
上图:
因为在对值类型进行比较时候,不管 .Equals() 方法还是 == 方法,都是对值类型变量(图中的A,B,C)里的值,也就是栈上面的实际存放的东西进行比较,A的10和B的11,B的11和C的11
下图是值类型在栈中的分配情况
(此图片复制其他网页:https://www.cnblogs.com/dotnet261010/p/12324317.html)
(B)引用类型
上图:
对于引用类型来说,等号 == 比较的是两个变量的引用地址是否一样。
可以发现 an01和an02都是 new 出来的,所以这两个用==判断时候,肯定不相等。
而对于equals来说仍然比较的是变量引用地址在堆上的值,也就是真实内容是否一样。
但 an01 和 an02 的内容是相同的啊,为什么结果还是false?原因引用类型从Object继承,Equals()是Object中的一个虚方法,
Animal类中没有进行重写,没有自己的判断,因此此时调用的仍是父类中的Equals方法,父类是不知道子类都有哪些成员字段的,因此返回的是false。要想让他能够比较两个变量的内容是否相同,那就应该重写Equals() 方法
重写如下图:
修改过后,此时再运行程序得出:
下图是引用类型在内存中分配情况
(此图片复制其他网页:https://www.cnblogs.com/dotnet261010/p/12324317.html)
这篇关于C# Equals方法和==有什么区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID