a.Equals(b) , a == b及Object.ReferenceEquals( a , b )的区别

C# Equals 和 ReferenceEquals 使用详解 阅读详情

For value types, “==” and Equals() works same way : Compare two objects by VALUE
Example:
int i = 5;
int k= 5;
i == k      => True
i.Equals(k) => True


Reference Types:
For reference types, both works differently :
“==” compares reference – you can say identity of objects and returns true if and only if both
references point to the SAME object while
Equals method compares object by VALUE and it will return true if the references refers object
which are equivalent
Example: StringBuilder sb1 = new StringBuilder(“Mahesh”);
StringBuilder sb2 = new StringBuilder(“Mahesh”);
sb1 == sb2 => False
sb1.Equals(sb2) => True

But now look at following issue:
String s1 = “Mahesh”;
String s2 = “Mahesh”;
In above case the results will be,
s1 == s2 =>         True
s1.Equals(s2 ) => True
String is actually reference type : it’s a sequence of “Char” and it’s also immutable but as you saw
above, it will behave like Value Types in this case.
Exceptions are always there ;)


Now another interesting case:
int i = 0;
byte b = 0;
i == b >       True
i.Equals(b) > False
So, it means Equals method compare not only value but it compares TYPE also in Value Types.

Recommendation:
For value types: use “==”
For reference types: use Equals method.
Some interesting facts:
Why to prefer Equals method in especially VB.Net?
Consider following snippet:
Public Sub doSomething()
     Dim s1 As String = “Mahesh”
     Dim s2 As String = “Mahesh”
     If s1 = s2 Then
          MessageBox.Show(“Same!”)
     End If
     If s1.Equals(s2) Then 
          MessageBox.Show(“Not same!”)
     End If
End Sub


Now if you will compile this stuff, and check generated IL code [Use ILDASM.exe ships with .Net
Framework], you will find,
in doSomething section, “=” will create,
IL_0010: call int32
[Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StringType::StrCmp(string,string,bool)

And, Equals method will create,
IL_0026: callvirt instance bool [mscorlib]System.String::Equals(string)
      The second approach, using Equals uses mscorlib and its smaller and faster than the “=”
because “=” uses VB.NET specific string comparison logic instead of core .Net implementation.
Single comparison operation may not give you performance hit but looping or at some critical part
of you code, it can.
So Equals just give some efficient code.
      More interesting thing that in C#, for the above code snippet, “==” and “Equals” both will result in
same IL code. so no ambiguity in C#.
     But if you used to code in both the language, then its obviously preferable to use Equals method.

 

手把手教你使用HFSS仿真高速差分过孔—上 高速数字电路设计中,信号完整性是一个非常重要的问题。为了使信号保持良好的传输特性,PCB板上的互联线一般都采用均匀传输线,使互联线保持特性阻抗一致性,减少信号反射。然而PCB板上的互联线很多时候避免不了换层的问题,这时候就必须使用过孔。过孔会导致阻抗不连续,进而造成反射,出现信号完整性问题。         当信号传输速率越高,信号前沿越短的时候,过孔引入的信号完整性问题越严重,需要对过孔进行优 阅读详情

相关推荐

避坑指南:大疆智图集群建模中5个90%新手会踩的雷(附错误日志分析)

本文针对大疆智图集群建模功能,总结了新手在部署和运行时极易遇到的五个常见问题,包括共享目录权限与路径、主从节点版本一致性、临时存储路径设置、网络与防火墙配置以及错误日志分析。文章结合具体错误日志,提供了详细的排查步骤和解决方案,旨在帮助用户快速定位并解决问题,充分发挥集群建模的效率优势。

weixin_29238147的博客 335

简述a.Equals(b)和a=b的区别

简述a.Equals(b)和a=b的区别 a==b:当a和b指向同一对象时为true,即a和b指向内存和内存地址的内容都相同时才为true;(地址相同,内容必相同) a.equals(b):当a和b的值相同时,即为ture;(只判断值相等) ...

上善若水 3070

【01】VisionMaster入门到精通——VisionMaster V4.0.0 试用版安装教程(安装试用补丁与试用授权)

本文详细介绍了海康VisionMaster 4.0.0试用版的安装步骤:首先从官网下载基础安装包、软加密试用版和示例程序(可选);安装时需按顺序完成主程序安装(选择软加密)、试用补丁安装和30天试用授权安装;最后提供了两种启动方式。文章还列出了试用版的7项功能限制,包括最多支持2个流程、2个全局相机等,并特别提醒试用版不维护、不提供补丁,建议用户转为正式版本。安装过程中若出现蓝屏需重启覆盖安装,授权失败时可参考指定解决方案。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 8903

a.equals(b)和a==b的区别及hashcode的意义

"".equals(A)和A.equals("")的区别:当A为null时,"".equals(A)返回true,A.equals("")返回为java.lang.NullPointerException;当A为""或其他值时,返回结果一致。   a==b:当a和b指向同一对象时为true,即a和b指向内存和内存地址的内容都相同时才为true;(地址相同,内容必相同) a.equals(b)...

cqzengddb的博客 2238

DeepSeek-V3本地Docker容器化部署

通过以上步骤,你可以在本地上成功通过容器化部署DeepSeek-V3。安装完成后,启动Docker Desktop。如果需要后台运行,可以加上。

u013302168的博客 2123

UE5深度图与Mask图渲染实战:从基础到高级应用

本文详细解析了在UE5中渲染深度图与Mask图的完整实战流程。从启用电影渲染队列、配置自定义深度模板通道等前期准备,到构建即用型深度图材质网络与精准物体Mask生成,并深入探讨了二者结合在NPR风格化、程序化雾气及AI工作流(如ComfyUI)中的高级应用,为影视、游戏后期与AI创作提供了高效的解决方案。

weixin_29001419的博客 349

“a == b”和“a.equals(b)”有什么区别?

如果 a 和 b 都是对象,则 a = b 会进行对象引用匹配,并且仅当两者都指向堆空间中的同一个对象时才返回 true,另一方面,a.equals(b) 用于逻辑映射及其期望对象重写此方法以提供逻辑相等性。例如,String 类重写了。方法,以便您可以比较两个 String,它们是不同的对象但包含相同的字母。

Hua19859210361的博客 1046

别再死记硬背菜单了!用Workbench搞定你的第一个ANSYS结构分析(附模型文件)

本文为零基础用户提供使用ANSYS Workbench完成第一个结构分析的完整指南。通过悬臂梁案例详细讲解从几何导入、材料定义、网格划分到边界条件设置的全流程,帮助初学者快速掌握有限元分析的基本操作,并附赠实用模型文件。

weixin_34233974的博客 307

java a.equals(b) 用法

一直以为这个方法是java8的,今天才知道是是1.7的时候,然后翻了一下源码。 本篇文章中会总结一下与a.equals(b)的区别,然后对源码做一个小分析。 一、值是null的情况: 1.a.equals(b), a 是null, 抛出NullPointException异常。 2.a.equals(b), a不是null, b是null, 返回false 3.Objects.equals(a, b)比较时, 若a 和 b 都是null, 则返回 true, 如果a 和 b 其中一个是null, 另一个不

weixin_43488635的博客 2308

squirrel校园二手交易平台

squirrel校园二手交易平台 (适合寻找SSM项目练手的你。) 项目起源:   期末的课程设计,三人一组,我和两个舍友,一时起兴,决定做一个校园二手交易平台,一开始兴致与激情满满,可是后期时间上的冲突,让我们三个人对于这个项目有点累。   这个项目刚定题两天,BezosLee由于通过了360的网上在线笔试,收到了360公司的免费培训邀请,要去北京的360总部进行培训一周,值得庆...

K.SHI的博客 5万+

WPF中使用TreeView封装组合控件TreeView+DataGrid

wpf的功能非常强大,很多控件都是原生的,但是要使用TreeView+DataGrid的组合,就需要我们自己去封装实现。功能如上图所示, 目前基本上把常用的样式都实现了,购买源码后,可以自行修改样式。本文源码效果如下,(搞了好几天,的确有难度,所以源码也收费,便宜,赚点辛苦费)第一种:技术的选择是TreeView(也就是本文的演示)。这2个图都是第三方控件自带的,并且都是收费使用。首先说明一下,实现上面的效果,有3种方法。本文演示的是使用TreeView的实现。第二种:技术的选择是DataGrid。

故里2130 1650

“a==b”和“a.equals(b)”有什么区别?

"==" 操作符定义:"==" 是Java中的比较操作符,用于比较两个变量的值是否相等。语法变量1 == 变量2应用场景当比较的是基本数据类型(如int、char、boolean等)时,"==" 比较的是它们的值。当比较的是对象引用时,"==" 比较的是两个引用是否指向内存中的同一个对象(即它们的内存地址是否相同)。".equals()" 方法定义:".equals()" 是Java中Object类的一个方法,用于比较两个对象的内容是否相等。语法对象1.equals(对象2)应用场景。

Good_tea_h的博客 1180

YOLO11 改进系列 | 引入2023年 MLCA 的 C3k2_MLCA 模块,近零参数开销的本地-全局通道注意力,适合检测与分割特征增强

本文提出将MLCA(混合局部通道注意力)模块嵌入YOLOv11的C3k2框架中,形成C3k2_MLCA改进结构。该模块通过5×5局部池化和1×1全局池化双路融合,结合ECA式Conv1d生成通道注意力,在几乎不增加参数量的前提下(仅增加66个参数),实现了局部空间信息与全局通道统计的联合建模。相比传统SE和ECA注意力,MLCA保留了空间分布信息,更适合实例分割等需要精细定位的任务。实验表明改进后模型参数量仅增加0.002%,计算量基本不变,是一种高效的注意力增强方案。

qq_44224801的博客 92

C# Object Equals 简介1

C# Object Equals 简介1: 本篇只讲解,除String类型以外的Equals 比较,因为String类型比较特别,固决定新开一篇文章单独介绍。 首先在此声明,除非有一定的内存知识基础,否则你可以直接跳到尾部看两个考点的总结即可,然后在之后的工作中慢慢体会吧。 先说几个专业名词: 栈:缓存,类似与电脑内存条,4G,8G,16G, 堆:类似于本地固态硬盘 值类型:int,f...

Give_me_coffee的博客 1501

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

== Equals ReferenceEquals三者的区别

ReferneceEqual 专用于引用类型的比较 对于值类型返回的永远是false 对于引用类型,会比较他们的引用是否相等,假如相等,返回true,否则返回false 对于string类型,也是比较其引用 static void Main(string[] args) { int a = 100; int b = 100; ...

weixin_33950757的博客 263

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# ==、object.Equals()、ReferenceEquals区别

var a=new object(); var b=a; Debug.Log(a==b);//True Debug.Log(object.Equals(a,b));//True Debug.Log(object.ReferenceEquals(a,b));//True Debug.Log(1==1);//True Debug.Log(object.Equals(1,1));//True...

kingBook928的博客 743

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C# ReferenceEquals,equals,==区别

ReferenceEquals:永远比较2个引用对象所指向的地址是否相同,是比较引用对于2个值类型,ReferenceEquals永远都为false,因为使用ReferenceEquals(object a,object b)方法后值类型被重新装箱为新的引用类型实例,自然不会引用相等。对于2个引用类型,ReferenceEquals则会比较它们是否指向同一地址。Equals:永远比较2个对象(无论引用,非引用)的值是否相等,是比较值==:对于引用对象比较其引用(string引用类型除外,string是比较值

66 2811

C#中ReferenceEquals, == , Equals的区别

1. ReferenceEquals, == , Equals<br />Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等。<br /><br />a) ReferenceEquals<br />ReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false。(因为Box以后的对象总是不同的,hehe)<br /><br />b) ==是一个可以重载的二元操作符,可以用于比较两个对象

狂野之城 635

c# == , Equals,ReferenceEquals归纳

Object类型的Equals,ReferenceEquals都有2个方法,静态方法和实例方法,两者的功能一样,只是实例方法要求实例不能为null。 比如 a.Equal(b)要求a不为null,object.Equal(a,b)则没有。 静态方法最终还是通过实例方法来实现的 1. ReferneceEqual 专用于引用类型的比较 对于值类型返回的永远是false 对于引用类型...

weixin_30295091的博客 288

C# ==、Equals、ReferenceEquals 区别与联系

.Net提供了ReferenceEquals、静态Equals,具体类型的Equals以及==操作符这四个判等函数。

程小智的博客 5191

Equals,==,ReferenceEquals区别

一、比较值类型的相等性 代表:int ReferenceEquals():比较两个对象的引用,即地址。Equals():比较两个对象的值。比较运算符(==):比较两个对象的值。 特例:struct无比较运算符(==)。 Code: static void Main(string[] args) { int int_a = 3;

ZoeGui的博客 582

ReferenceEquals 静态Equals equals == 的区别

System.Object对于ReferenceEquals、Equals(静态方法就是调用虚方法,结果一样)和==,定义的都是比较引用但三者的不同之处在于,RefEquals是静态方法,不可被重写,而Equals是虚方法,可以在派生类中被重写,==运算符可以被重载。 所以对于像int、double这样继承自System.ValueType的类型(struct也一样),在ValueType这一

wzjssssssssss的博客 893

==/Equals /ReferenceEquals 异同

==/Equals /ReferenceEquals 异同 ==:比较两个对象是否相等。会根据需要自动进行必要的类型转换。 对引用类型比较其引用地址,对值类型比较其值。 Equals:比较两个对象是否相等。 对于值类型,比较其值,不会进行类型转换。 对引用类型,比较其引用地址 ReferenceEquals:Object的静态方法,比较两个对象的引用是否相等,值类型和引用类型一样。 对于值类型,永...

皮卡丘丘丘~~~ 324

C#中ReferenceEquals和Equals的区别

ReferenceEquals()判断两个字符串是否指向相同的内存地址;(判断引用) Equals,先判断两个字符串有相同的内存位置,是则两个字符串相等;否则逐字符比较两个字符串,判断是否相等(先判断引用,在判断值是否相等) 下面举一个例子看一下: view plaincopy to clipboardprint?string peom1 = "Kubla Khan";...

alan9306的博客 929

C#中的ReferenceEquals、Equals以及==

https://www.cnblogs.com/ArtofDesign/p/3615212.html C#中有一共有四种相等性判断方法: //Object中定义的三个方法 public static bool ReferenceEquals(object objLeft, object objRight); public static bool Equals(object obj...

N的专栏 138

ReferenceEquals, == , Equals 的区别

http://www.cnblogs.com/pursue/articles/1614285.html ReferenceEquals, == , Equals    Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等。 1. ReferenceEquals    ReferenceEquals是Object的静态方法,用于比较两个引用类

Lyncai的专栏 809
上一篇: Shallow Copy(影子拷贝) VS Deep Copy(深拷贝)
下一篇: LINQ的发音
Jason_Steven
博客等级 码龄20年 14粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值