为什么C#Object类有两个equals方法

Sat*_*uja 3 c# java oop

作为C#中的新手,想知道为什么ObjectC#类有两个 Equals带有以下签名的方法.

public virtual bool Equals(object obj);
public static bool Equals(object objA, object objB);
Run Code Online (Sandbox Code Playgroud)

而在Java中只有一种 equals方法.

Dmi*_*nko 10

第一

public virtual bool Equals(object obj);
Run Code Online (Sandbox Code Playgroud)

是比较对象的标准,典型等方法:if this等于obj类似Java的方法

第二

public static bool Equals(object objA, object objB); 
Run Code Online (Sandbox Code Playgroud)

是一种糖你不来比较objAnull要比较每一次objA,objB实例

https://referencesource.microsoft.com/#mscorlib/system/object.cs,f2a579c50b414717

public static bool Equals(Object objA, Object objB) 
{
    if (objA==objB) {
        return true;
    }
    if (objA==null || objB==null) {
        return false;
    }
    return objA.Equals(objB);
}
Run Code Online (Sandbox Code Playgroud)

Java 确实有类似的方法:

https://docs.oracle.com/javase/7/docs/api/java/util/Objects.html#equals(java.lang.Object,%20java.lang.Object)

// Please, note Objects instead of Object
Objects.equals(Object a, Object b);
Run Code Online (Sandbox Code Playgroud)