Hash Map中的getEntry()方法使用冗余Object引用

时间:2015-01-11 18:00:02

标签: java hashmap

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;
            }

1 个答案:

答案 0 :(得分:0)

e.key的值保存在局部变量k中可能会避免在e.key条件下使用两次if的值不一致的可能性。

如果在以下情况下会怎样:

if (e.hash == hash &&
                ( e.key == key || (key != null && key.equals(e.key))))
                return e;

e.keye.key == key之间key.equals(e.key)的值会发生变化吗?