LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#中Equals和==运算符的区别

admin
2024年6月8日 18:18 本文热度 583

前言

C#语言是一种强类型语言,要求每个变量都必须指定数据类型。C#语言的数据类型分为值类型引用类型二种。在实际编写程序时,经常会对二个数据进行比较其是否相等。C#语言为我们提供了==运算符Equals方法。在应用这二种方式时是存在一些区别的,下面就一起了解两者有什么区别。

值类型相等

对于预定义的值类型,二个操作数的相等比较,是判断操作数的值是否相等。如果相等则返回true,不等则返回false。在值类型的判断上,不论是使用运算符==,还是使用Equals方法二者是没有区别的。
示例:
namespace Fountain.EquationDemo{    class Program    {        /// <summary>        /// 控制台程序入口        /// </summary>        static void Main(string[] args)        {            double applePrice = 9.45;            double bananaPrice = 9.45;            // 使用==比较            Console.WriteLine("运算符==比较结果为:{0}", applePrice == bananaPrice);            // 使用 Equals 方法比较            Console.WriteLine("Equals方法比较结果为:{0}", applePrice.Equals(bananaPrice));            Console.ReadLine();        }    }}#region 输出结果运算符==比较结果为:TrueEquals方法比较结果为:True#endregion

引用型相等

string是一种特殊的引用类型,所以对于引用类型的相等判断,我们需分为自定义的引用类型特殊的字符串引用类型二个方向看。

1、自定义的引用类型

自定义引用类型使用Equals和==运算符二种方式比较的是引用类型在栈中的地址。当然一些预定义的引用类型也是一样的(没有对Equals和==进行过重载
示例:
namespace Fountain.EquationDemo{    class Program    {        /// <summary>        /// 控制台程序入口        /// </summary>        static void Main(string[] args)        {            Student student1 = new Student()            {                ID = "0001",                Name = "小明"            };            Student student2 = new Student()            {                ID = "0001",                Name = "小明"            };            // 定义对象 并将 student1 赋值给对象 student3            Student student3 = student1;            // 二个对象比较            Console.WriteLine("student1与student2使用==比较结果为:{0}", student1 == student2);            // 二个对象比较            Console.WriteLine("student1与student2使用Equals方法比较结果为:{0}", student1.Equals(student2));            // 二个对象比较            Console.WriteLine("student1与student3使用==比较结果为:{0}", student1 == student3);            // 二个对象比较            Console.WriteLine("student1与student3使用Equals方法比较结果为:{0}", student1.Equals(student3));        }    }    /// <summary>    /// 定义自定义类    /// </summary>    public class Student    {        /// <summary>        /// 学号        /// </summary>        public string ID { get; set; }        /// <summary>        /// 姓名        /// </summary>        public string Name { getset; }    }}#region 输出结果student1与student2使用==比较结果为:Falsestudent1与student2使用Equals方法比较结果为:False
student1与student3使用==比较结果为:Truestudent1与student3使用Equals方法比较结果为:True#endregion
匿名类使用==运算符是比较操作数在栈中的地址,使用Equals方法则比较操作数的值。
示例:
namespace Fountain.EquationDemo{    class Program    {        /// <summary>        /// 控制台程序入口        /// </summary>        static void Main(string[] args)        {            // 声明匿名类            var anonymous1 = new { ID = "1000", Name = "孙悟空" };            // 匿名类            var anonymous2 = new { ID = "1000", Name = "孙悟空" };            //             Console.WriteLine("anonymous1与anonymous2使用==比较结果为:{0}", anonymous1 == anonymous2);            //             Console.WriteLine("anonymous1与anonymous2使用Equals方法比较结果为:{0}", anonymous1.Equals(anonymous2));        }    }}#region 输出结果anonymous1与anonymous2使用==比较结果为:Falseanonymous1与anonymous2使用Equals方法比较结果为:True#endregion

2、 特殊的字符串引用类型

.NET在string类型上重写了Equals方法和==运算符,使Equals和==运算符二种方式比较是以string字符串内容进行。也就是说这二者在string类型上是没有区别的。
示例:
namespace Fountain.EquationDemo{    class Program    {        /// <summary>        /// 控制台程序入口        /// </summary>        static void Main(string[] args)        {            string expressCode = "YTO";            string objectExpressCode = new string(new char[] { 'Y', 'T', 'O'});
           Console.WriteLine("运算符==比较结果为:{0}", "YTO" == objectExpressCode);            Console.WriteLine("Equals方法比较结果为:{0}", "YTO".Equals(objectExpressCode));
           Console.WriteLine("运算符==比较结果为:{0}", "YTO" == expressCode);            Console.WriteLine("Equals方法比较结果为:{0}", "YTO".Equals(expressCode));        }    }}
#region 输出结果运算符==比较结果为:TrueEquals方法比较结果为:True
运算符==比较结果为:TrueEquals方法比较结果为:True#endregion

小结

1、值类型使用==运算符与Equals方法比较的是操作数的值。
2、特殊的字符串引用类型(string)使用==运算符与Equals方法比较的是操作数的值。(因为它两是被重写过的)
3、自定义引用类型使用==运算符与Equals方法比较的是操作数在栈中的地址。(我们可以重载Equals和==使其按我们自己的相等性逻辑进行比较
4、匿名类类型使用==运算符与Equals方法比较方式不同。


该文章在 2024/6/8 18:18:03 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved