Object.ReferenceEquals - 靜態,參考相等Object.Equals - 靜態,邏輯相等Equals - 實例虛擬方法== 運算符 - 靜態運算符四者相互關聯,修改其中一個會影響其他結果。
public static bool ReferenceEquals(object left, object right);
判斷兩個引用是否指向同一記憶體位址。值型別呼叫永遠回傳 false,因為每次裝箱產生不同物件:
int n = 10;
Object.ReferenceEquals(n, n); // false - 兩次裝箱位址不同
此方法無需覆寫,已完美完成任務。
public static bool Equals(object left, object right)
{
if (left == right) return true;
if (left == null || right == null) return false;
return left.Equals(right);
}
三步驟判斷:
Equals雖參數型別同為 object,但 Object.Equals 能正確處理值型別:
int n = 10;
Object.Equals(n, n); // true - 正確比較數值
Object.Equals(n, 10); // true
因為步驟 1-2 使用型別的 == 運算符(值型別預設比較數值),步驟 3 呼叫實例 Equals(值型別預設比較數值)。
型別是否提供正確的 == 與 Equals 實作,決定靜態 Object.Equals 結果的正確性。