读完这个问题后为什么"int"和"sbyte"GetHashCode函数生成不同的值?我想进一步挖掘并发现以下行为:
sbyte i = 1;
int j = 1;
object.Equals(i, j) //false (1)
object.Equals(j, i) //false (2)
i.Equals(j) //false (3)
j.Equals(i) //true (4)
i == j //true (5)
j == i //true (6)
i.GetHashCode() == j.GetHashCode() //false (7)
Run Code Online (Sandbox Code Playgroud)
如果两个对象不表示相同的对象引用且都不为null,则它调用objA.Equals(objB)并返回结果.这意味着如果objA重写Object.Equals(Object)方法,则调用此覆盖.
我很感兴趣,如果有人能解释为什么我认为在相当基本的.NET类型中观察到不一致的行为.