if (p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k))))
源碼中為什么使用了equals判斷相等后,同時需要判斷hash碼是否相同?
這里需要注意的是key可以使對象即Object類型的,也可以是Long、Integer等類型;
如果是object作為key,實際判斷key相等默認使用object=object方式,
如果是Long、Integer類型作為key時,實際equals方法中判斷的是值是否相同,因此有時會類型不同但是值相同,為了防止這種情況增加了hash碼判斷。