欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

C#中Equals和==的区别 (面试官经常会问到)

发布时间:2023/12/20 C# 79 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C#中Equals和==的区别 (面试官经常会问到) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

首先对于值类型来说,并没有什么区别。区别只针对于引用类型。

一、值类型

   1.对于值类型来说,两者比较的都是“内容”是否相同,也就是值是否相同(值类型只有存在栈上)。

 

二、引用类型

    1.对于引用类型来说,本身的值存在堆中,在栈中存入本身值的引用,可以根据引用找到自己。

    所以:

       对于引用类型来说,==比较的两个变量的”引用“是否一样,也就是“地址”是否一样。而equals比较的是”内容“是否一样。

      1. 比较引用类型:

           

Person p1 = new Person("aa", 12);Person p2 = new Person("aa", 12);Console.WriteLine("Equals和= =(等于号)的比较");Console.WriteLine("p1==p2 " + (p1 == p2));//结果:false Console.WriteLine("p1.Equals(p2) " + p1.Equals(p2));//结果:false

 

           p1==p2 的结果是false,很简单,因为他们本身是两个不同的变量,引用地址是不同的。

           那么p1.Equals(p2) 为什么是false 呢?

              因为Equlas是object的一个虚方法,而person并没有对其进行重写,此时调用的是父类的Equlas方法,但是父类是不知道p1和p2中有哪些成员的,

          所以返回false。

          如果想让其相等,就要重写父类的Equlas方法,比如:

         

public override bool Equals(object obj){Person p = obj as Person;//对变量的所有的属性都要进行比较 只有都相同才返回trueif (this.Age == p.Age && this.Name == p.Name){return true;}else{return false;}}

           

         在开发过程中,会经常用到string类型的字段进行Equlas比较,但是比较的结果和==一模一样。比如:

         

string s1 = "abc";string s2 = "abc";Console.WriteLine("s1==s2 " + (s1 == s2));//true Console.WriteLine("s1.Equals(s2) " + s1.Equals(s2));//true

       为什么s1和s2两个不同的变量Euulas比较的结果会相同呢?

  因为string是微软封装的一个字符串类,在内部已经对==操作符进行了重写。重写后比较的是两个变量的值是否相同。

   内部封装如下:

        

public static bool operator == (string a,string b) {return Equals(a,b); }

      

     因此,对于string类型来说,比较的都是值是否相等。(可以把string当成一个特殊的引用类型)。

      

总结:对于值类型来说,Equlas和==并没有什么区别,比较的都是值是否相等。

          对于引用类型来说,Equlas比较的是值是否相等,==比较的是引用是否相等。string是个特殊的引用类型,内部进行了重写,==比较的是值是否相等。

    

 

转载于:https://www.cnblogs.com/BounceGuo/p/10320873.html

总结

以上是生活随笔为你收集整理的C#中Equals和==的区别 (面试官经常会问到)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。