zoukankan      html  css  js  c++  java
  • C# Equals方法和==有什么区别

    开发工具: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)

     

  • 相关阅读:
    shell-3
    shell-2
    shell-1
    zabbix监控top
    django指导网址
    文件下载漏洞
    Build a Raspberry Pi powered live train station sign for your desk
    Use a Raspberry Pi to communicate with Amazon AWS IoT
    Describing and Listing Your Stacks
    固有功能参考 Intrinsic Function Reference
  • 原文地址:https://www.cnblogs.com/hanjian99/p/15255415.html
Copyright © 2011-2022 走看看