这是我从MSDN中找到的东西,我无法理解这句话。我非常感谢一个能够证明这一点的代码示例。
"两个相等的对象返回相等的哈希码。但是,相反的情况并非如此:相等的哈希码并不意味着对象相等,因为不同(不相等)的对象可以具有相同的哈希码。 "
取自:http://msdn.microsoft.com/en-us/library/system.object.gethashcode(v=vs.110).aspx
谢谢大家!
答案 0 :(得分:8)
我非常感谢能够证明这一点的代码示例。
string s1 = "ꂢꂢ";
string s2 = "";
int h1 = s1.GetHashCode();
int h2 = s2.GetHashCode();
bool b1 = s1 == s2;
bool b2 = h1 == h2;
b1是假的。 b2是真的。
只有40亿个哈希码,但是有无限多的字符串。因此,它们中至少有两个必须具有相同的哈希码。我提供了其中两个;试着找到更多。
有关详细信息,请参阅:
http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/
http://blogs.msdn.com/b/ericlippert/archive/2011/07/15/the-curious-property-revealed.aspx
答案 1 :(得分:7)
这可以通过应用Pigeonhole principle来解释。 GetHashCode()
方法返回int
,可以表示(最多)约40亿个值。在单个程序中一次可能存在超过40亿个不相等的对象(假设是64位平台!)。因此,这些对象中的两个或多个必须从GetHashCode()
返回相同的值。
答案 2 :(得分:0)
同一天出生的两个人出生在同一个月。然而,情况恰恰相反:同一个月出生的两个人并不暗示他们出生在同一天,因为不同的人可以在不同的日子里过生日。