在java hashmap实现键中首先分配给对象然后进行比较

Nit*_*raj 9 java hashmap

看java的hashmap实现,无法理解一些行背后的原因.在下面从这里复制的代码中,在365-367行中,我无法理解他们为什么先将e.key赋值给k然后将==与key [(k = e.key)== key进行比较].为什么不直接做(e.key == key).此模式在代码中出现多次.

359 
360     final Entry<K,V> getEntry(Object key) {
361         int hash = (key == null) ? 0 : hash(key.hashCode());
362         for (Entry<K,V> e = table[indexFor(hash, table.length)];
363              e != null;
364              e = e.next) {
365             Object k;
366             if (e.hash == hash &&
367                 ((k = e.key) == key || (key != null && key.equals(k))))
368                 return e;
369         }
370         return null;
371     }
Run Code Online (Sandbox Code Playgroud)

Nit*_*raj 0

我认为@marco13 已经发布了回答这个问题的正确链接。只是再次发布链接。 为什么锁被捕获到局部变量

在ArrayBlockingQueue中,为什么将final成员字段复制到局部final变量中?

为什么jdk代码风格使用变量赋值并在同一行读取 - 例如。(i=2) < 最大值

答案:使用成员变量的函数局部引用可以减少生成的字节码的大小。