【发布时间】:2013-12-17 00:00:07
【问题描述】:
在浏览 HashMap 的 put() 代码时,我遇到了一段奇怪的代码。考虑下面的代码摘录:
490 public V put(K key, V value) {
491 if (table == EMPTY_TABLE) {
492 inflateTable(threshold);
493 }
494 if (key == null)
495 return putForNullKey(value);
496 int hash = hash(key);
497 int i = indexFor(hash, table.length);
498 for (Entry<K,V> e = table[i]; e != null; e = e.next) {
499 Object k;
500 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
501 V oldValue = e.value;
502 e.value = value;
503 e.recordAccess(this);
504 return oldValue;
505 }
506 }
在第 500 行,为什么将键分配给一个新变量k,然后在 OR 条件中使用?为什么不能直接写成这样:
if (e.hash == hash && (e.key == key || key.equals(e.key))) {
我不知道为什么它是这样写的,但我确信它的编码背后有一些原因。是某种优化吗?
有人能解释一下吗?
【问题讨论】:
标签: java optimization reference hashmap