• C#中,对Equals()、ReferenceEquals()、==的理解



    1、ReferenceEquals()比较的是对象reference,声明如下:

    public static bool ReferenceEquals(
       
    object objA,
       
    object objB
    );
    特殊情况:objA、objB均为NULL时,为true
    注意:该方法如作用与System.ValueType型(值类型),一律返回false:值类型需进行boxing(装箱)操作,则reference不一样了

    2、==默认也是reference的,但很多对象给操作符重写了,进行的是value比较,System.ValueType均如此,部分class也重写了,典型的如System.String

    3、Equals()则相当复杂,两种定义:
     public virtual bool Equals(object);

     
    public static bool Equals(objectobject);
    virtual方法的Equals默认的是reference的比较,但.NET Framework中的大部分类都重写了该方法,所以需要具体类型对待。static方法的Equals则有点区别,其判别方式如下:i) 先A、B两对象是否同一instance,是-true. ii)A、B是否为NULL,是-true. iii) 前两者均不是true,返回调用virtual的Equals()方法的结果.这里需要注意的即virtual的Equals()方法大都被重写了,所以返回的结果需要依赖于各自类型的实现.
  • 相关阅读:
    Leetcode Spiral Matrix
    Leetcode Sqrt(x)
    Leetcode Pow(x,n)
    Leetcode Rotate Image
    Leetcode Multiply Strings
    Leetcode Length of Last Word
    Topcoder SRM 626 DIV2 SumOfPower
    Topcoder SRM 626 DIV2 FixedDiceGameDiv2
    Leetcode Largest Rectangle in Histogram
    Leetcode Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/FallingAutumn/p/433652.html
Copyright © 2020-2023  润新知