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

来源:互联网 发布:愿你知我心 编辑:程序博客网 时间:2024/04/28 06:33

昨天看到《项目中的.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》,和我一样的初学者也可以看一下。

0 0