开发工具:VS2019

 

一、关于这两个比较,需要从值类型和引用类型两方面来说

      (A)先说值类型

             上图: 

  

 

 

 

 因为在对值类型进行比较时候,不管 .Equals() 方法还是 == 方法,都是对值类型变量(图中的A,B,C)里的值,也就是栈上面的实际存放的东西进行比较,A的10和B的11,B的11和C的11

 

下图是值类型在栈中的分配情况

 

 

 

 

(此图片复制其他网页:https://www.cnblogs.com/dotnet261010/p/12324317.html)

 

 

 

 

      (B)引用类型

              上图:

 

 

 

      对于引用类型来说,等号 == 比较的是两个变量的引用地址是否一样。

      可以发现 an01和an02都是 new 出来的,所以这两个用==判断时候,肯定不相等。

      而对于equals来说仍然比较的是变量引用地址在堆上的值,也就是真实内容是否一样。

      但  an01 和  an02  的内容是相同的啊,为什么结果还是false?原因引用类型从Object继承,Equals()是Object中的一个虚方法,

      

 

 

      Animal类中没有进行重写,没有自己的判断,因此此时调用的仍是父类中的Equals方法,父类是不知道子类都有哪些成员字段的,因此返回的是false。要想让他能够比较两个变量的内容是否相同,那就应该重写Equals() 方法

      重写如下图:

      

 

       修改过后,此时再运行程序得出:

 

 

 

     下图是引用类型在内存中分配情况

(此图片复制其他网页:https://www.cnblogs.com/dotnet261010/p/12324317.html)

 

 

 

版权声明:本文为hanjian99原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hanjian99/p/15255415.html