为什么"int"和"sbyte"GetHashCode函数会生成不同的值?

Eri*_*ura 5 c# hash

我们有以下代码:

int i = 1;
Console.WriteLine(i.GetHashCode());  // outputs => 1
Run Code Online (Sandbox Code Playgroud)

除了sbyte和short之外,C#中的所有整数类型都是有意义的.那是:

sbyte i = 1;
Console.WriteLine(i.GetHashCode());   //  outputs => 257
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

har*_*old 5

因为该方法(SByte.GetHashCode)的来源是

public override int GetHashCode()
{
    return (int)this ^ ((int)this << 8);
}
Run Code Online (Sandbox Code Playgroud)

至于为什么,微软有人知道......

  • 它会在整个范围内更多地分配sbyte域中的值(实际上,只有~32k)..不确定C#,但Java HashMap(等),已经使用了重新分配函数.. (4认同)