作者:牛哥粉丝_对白 | 来源:互联网 | 2023-02-04 11:42
该Object.equals
方法的契约要求实现是反身的:
它是自反的:对于任何非空引用值x,x.equals(x)
应该返回true
.
这意味着HashMap
允许实现,实际上确实总是使用==
first 进行比较,并且只有在不进行比较时才调用该equals
方法true
.因此,如果e1
使用完全相同的对象替换键的值e1
,它只使用==
比较并且永远不会调用该equals
方法.
如果查看HashMap
为键设置值的实现,您会发现此语句的变体两次:
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
break;
(一次用于哈希桶中的第一个密钥,然后在循环中迭代哈希桶中的任何其他密钥)
1> Erwin Bolwid..:
该Object.equals
方法的契约要求实现是反身的:
它是自反的:对于任何非空引用值x,x.equals(x)
应该返回true
.
这意味着HashMap
允许实现,实际上确实总是使用==
first 进行比较,并且只有在不进行比较时才调用该equals
方法true
.因此,如果e1
使用完全相同的对象替换键的值e1
,它只使用==
比较并且永远不会调用该equals
方法.
如果查看HashMap
为键设置值的实现,您会发现此语句的变体两次:
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
break;
(一次用于哈希桶中的第一个密钥,然后在循环中迭代哈希桶中的任何其他密钥)