equals()和运算符==的区别

本文深入解析.NET编程中equals()方法与运算符==在引用类型比较时的差异,通过实例演示,帮助开发者正确理解两者作用,特别强调了字符串类型的特殊行为,适合初学者参考。

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

昨天看到《项目中的.NET》里面介绍equals()和运算符==的区别,解释的很易懂。所以写在这,巩固一下,都TM赖我这内存超小的脑子。好了,废话不说了。

  大家都知道,值类型式存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储应用类型变量的地址,其本身则存储在堆中。

  “==”操作符比较的是两个变量的值是否相等,对于引用类型变量表示的是两个变量在栈中的内容是否相同(即变量的存储的地址)。

  equals()表示的是两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

  string s1=new string(new char[]{'1','2'});

  string s2=new string(new char[]{'1','2'});

  s1==s2   //返回true

  s1.Equals(s2)  //返回true

  object o1=s1;

  object o2=s2;

  o1==o2  //返回false

  o1.Equals(o2)  //返回true

  按照"=="操作符和equals的定义,可能不理解为什么s1,s2的变量地址不相同但是用"=="却返回true,这是因为字符串是一个特殊的引用型类型,在C#语言中,重载了string对象的很多方法(包括equals()方法),使string对象用起来就像是值类型一样。

  所以s1==s2返回的是true

  以上为书中介绍equals()和运算符==的区别,我只是写出了容易误解的部分。如果有幸被大家看到,再次推荐一下《项目中的.NET》,和我一样的初学者也可以看一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值