详解C#中==、Equals、ReferenceEquals的区别

本文导读:

C#中Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等,对于相同的基本值类型,==和Equals()比较结果是一样的;由于ReferenceEquals()是判断两个对象的引用是否相等,对于值类型,因为每次判断前都必须进行装箱操作,也就是每次都生成了一个临时的object,因而永远返回false。

一、== 运算符

1、静态相等符号,对应存在的!=,这个符号是一个可以重载的二元操作符,可以用于比较两个对象是否相等。

2、它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。

3、对于引用对象比较其引用(string引用类型除外,string是比较值)

4、对于值类型比较其值

5、某些内置的引用类型重载了==符号,例如string就重载==,使其比较的不是两个字符串的引用,而是比较的两个字符串字面量是否相等。

6、例如:

int i = 5;int j = 5;Console.WriteLine(i == j);//值类型比较代数值 输出True  int m = 6;double n = 6.0;Console.WriteLine(m == n);//类型自动转换并比较数值 输出True   object obj1 = new object();object obj2 = new object();Console.WriteLine(obj2==obj1);//引用类型比较引用 输出False

登录后复制

   

二、Equals

1、用于比较两个对象的引用是否相等。

2、然而对于值类型,类型相同(不会进行类型自动转换),并且数值相同(对于struct的每个成员都必须相同),则Equals返回 true,否则返回false。

3、对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时 候才返回true。

4、可以根据需要对Equals进行重载

5、实例

int i = 5;int j = 5;Console.WriteLine(i.Equals(j));//值类型比较 输出True  int m = 6;double n = 6.0;Console.WriteLine(m.Equals(n));//类型不会自动转换并比较数值 输出False  object obj1 = new object();object obj2 = new object();Console.WriteLine(obj2.Equals(obj1));//引用类型比较 输出FalseConsole.WriteLine(obj2.Equals(string.Empty));//输出False,比较量对象的类型不同直接返回False

登录后复制

三、ReferenceEquals

1、Object的静态方法,比较两对象的引用是否相等,值类型和引用类型都是一样。

2、不能在继承类中重写该方法。原型是:public static bool ReferenceEquals(object objA, object objB);FCL已经帮我们实现。它就是比较引用指向的内存地址是否一样。

3、对于2个值类型,ReferenceEquals永远都为false,因为使用ReferenceEquals(object a,object b)方法后值类型被重新装箱为新的引用类型实例,自然不会引用相等。

4、对于2个引用类型,ReferenceEquals则会比较它们是否指向同一地址。

5、实例

int i = 5; int j = 5; Console.WriteLine(object.ReferenceEquals(i, j));//输出False  int m = 6; double n = 6.0; Console.WriteLine(object.ReferenceEquals(m, n));//输出False  object obj1 = new object(); object obj2 = new object(); Console.WriteLine(object.ReferenceEquals(obj1, obj2));//输出False

登录后复制

   

以上就是==、Equals、ReferenceEquals的区别,希望对大家的学习有所帮助, 更多相关文章请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2554654.html

(0)
上一篇 2025年3月6日 07:07:11
下一篇 2025年3月6日 07:07:27

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • C# 中的 == 和 equals()区别

    如以下代码: int age = 25; short newAge = 25; Console.WriteLine(age == newAge);  //true Console.WriteLine(newAge.Equals(age));…

    编程技术 2025年3月6日
    200
  • Equals,ReferenceEquals,==的区别

    在.net中有几种比较相等的方法 object的静态ReferenceEquals() object的静态Equals() object的示例Equals() 运算符== 下面介绍一下他们的区别和用法。 ReferenceEquals Re…

    编程技术 2025年3月6日
    200
  • C# 中的 == 和 equals()有什么区别

     如以下代码: int age = 25; short newAge = 25; Console.WriteLine(age == newAge);  //true Console.WriteLine(newAge.Equals(age))…

    编程技术 2025年3月6日
    200
  • C#中equals和==的区别有哪些

    c# 中有两种不同的相等:引用相等和值相等。 ◎值相等是大家普遍理解的意义上的相等:它意味着两个对象包含相同的值。◎引用相等意味着要比较的不是两个对象,而是两个对象引用,且两者引用的是同一个对象。   Equals: 下面的语句中,x、y …

    编程技术 2025年3月6日
    200
  • C#初学者对Equals方法的几个常见误解

      很多c#的教材都会强调对象相等的概念。我们都知道,在c#的世界里存在两种等同性。一种是逻辑等同性:如果两个对象在逻辑上代表同样的值,则称他们具有逻辑等同性。另一种是引用等同性:如果两个引用指向同一个对象实例,则称他们具有引用等同性。  …

    编程技术 2025年3月6日
    200
  • 解决scipy库安装问题的方法和技巧

    处理scipy库安装失败的步骤与技巧 概述:Scipy是一个用于数学、科学和工程领域的Python软件包。它提供了许多高效且易于使用的数值计算工具,包括数值积分、最优化、信号处理、线性代数等功能。然而,在安装Scipy库时,有时会遇到一些问…

    2025年3月5日
    200
  • php中的$符号的含义是什么

    php中的$符号的含义是变量或对象名标识符,如果$符号后面加上字符串,那么它就表示一个变量名或对象名。例如【$txt = “hello world”】,表示变量txt保存值hello world。 php中的$符号是…

    2025年3月5日
    200
  • win10 1909更新在28%处停滞

    当我们在对win10系统进行更新升级的时候,更新进度到了28%就突然卡死不动了。出现这种情况先不要着急,小编觉得可能是因为网络的问题。因为如果网速不好或者是断网的话,更新时就没办法下载安装一些所需文件。再就是系统后台可能在进行一些比较大的文…

    2025年3月5日 互联网
    200
  • C#中@用法的实例解析

    本文实例汇总了c#中@的用法,对c#程序设计来说有不错的借鉴价值。具体如下: 一 字符串中的用法 1.学过C#的人都知道C# 中字符串常量可以以@ 开头声名,这样的优点是转义序列“不”被处理,按“原样”输出,即我们不需要对转义字符加上 (反…

    编程技术 2025年3月5日
    200
  • c语言中==是什么意思?

    c语言中==是什么意思? 在C语言中有一种关系运算符,==就是其中一种关系运算符的存在,它的主要作用用于语句的一种判断工作。 ==表示的意义:判断是否相等的。如果两个值相等,那么执行之后的程序的一个过程的一种关卡式程序流程。 立即学习“C语…

    2025年3月3日 编程技术
    200

发表回复

登录后才能评论