for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
return e;
}
HashMap中的for循环使用冗余对象引用k?为什么需要它?为什么循环不能像这样?它是访问(e.key两次)和新对象引用之间的权衡吗?
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
if (e.hash == hash &&
( e.key == key || (key != null && key.equals(e.key))))
return e;
}
答案 0 :(得分:0)
将e.key
的值保存在局部变量k
中可能会避免在e.key
条件下使用两次if
的值不一致的可能性。
如果在以下情况下会怎样:
if (e.hash == hash &&
( e.key == key || (key != null && key.equals(e.key))))
return e;
e.key
和e.key == key
之间key.equals(e.key)
的值会发生变化吗?