1. 程式人生 > 其它 >.Net 【基礎回顧】比較比較 Equals ReferenceEquals

.Net 【基礎回顧】比較比較 Equals ReferenceEquals

物件一致和物件相等

  • 物件一致/the same instance:兩個物件是一個例項,引用相同

  • 物件相等/considered equal:指兩個物件的值相同,但引用不一定相同

比較運算子==

  1. 引用型別,預設是比較引用的

  2. 值型別預設比較值

  3. string 比較值

Object中的例項方法Equals

  1. 虛方法,需要子類繼承重寫,預設實現還是比較兩者是否為同一個引用

  2. 所有值型別的基類System.ValueType中重寫了該方法,用來比較值相等

  3. string 比較值相等

Object.Equals(left, right)靜態方法

considered equal

  1. 引用相同,必定相等

  2. 只有一個null,必定不等

  3. 都不是null,且不是同一個引用,根據left的例項Equals方法判斷

  4. 都是null返回true

public static bool Equals(object left, object right)
{
    if(object.ReferenceEquals(left,right)) //如果引用相同,則必定相等(包含兩個都是null的情況)
    {
        return true;
    }
    if(object.ReferenceEquals(left ,null)|| object.ReferenceEquals(null,right)) //若只有一個是null,則必定不等
    {
        return false;
    }
    return left.Equals(right);//兩個都不是null,且也不是同一個引用,則根據left的例項Equals方法來判斷。
}

Object.ReferenceEquals(left, right)靜態方法

the same instance

  1. 比較兩者是否是相同的引用

  2. 不能重寫

  3. 值型別物件的比較永遠返回false

  4. 兩個null的比較永遠返回true