无法理解来自MSDN的哈希码相等

use*_*153 -1 c# hash

这是我从MSDN中找到的东西,我无法理解这个陈述.我非常感谢一个能够证明这一点的代码示例.

"两个相等的对象返回相等的哈希码.但是,相反的情况并非如此:相等的哈希码并不意味着对象相等,因为不同的(不相等的)对象可以具有相同的哈希码."

取自:http://msdn.microsoft.com/en-us/library/system.object.gethashcode( v= vs.110).aspx

谢谢大家!

Eri*_*ert 8

我非常感谢一个能够证明这一点的代码示例.

string s1 = "??";
string s2 = "";
int h1 = s1.GetHashCode();
int h2 = s2.GetHashCode();
bool b1 = s1 == s2;
bool b2 = h1 == h2;
Run Code Online (Sandbox Code Playgroud)

b1是假的.b2是真的.

只有40亿个哈希码,但是有无限多的字符串.因此,它们中至少有两个必须具有相同的哈希码.我提供了其中两个; 试着找到更多.

有关更多信息,请参阅:

http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/

http://blogs.msdn.com/b/ericlippert/archive/2011/07/12/what-c​​urious-property-does-this-string-have.aspx

http://blogs.msdn.com/b/ericlippert/archive/2011/07/15/the-curious-property-revealed.aspx


Gre*_*ill 7

这可以通过应用鸽笼原理来解释.该GetHashCode()方法返回一个int,可以表示(最多)约40亿个值.在单个程序中一次可能存在超过40亿个不相等的对象(假设是64位平台!).因此,这些对象中的两个或多个必须从中返回相同的值GetHashCode().