【发布时间】:2015-04-27 06:56:23
【问题描述】:
查看java的hashmap实现,无法理解某些行背后的原因。在下面从here 复制的代码中,在第 365-367 行,我无法理解为什么他们首先将 e.key 分配给 k,然后将 == 与 key [ (k = e.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 }
【问题讨论】:
-
好吧,他们在条件的另一部分使用了 k 的值,但他们可以改写为
(e.key == key || (key != null && key.equals(e.key)))并消除k变量。我看不出引入该局部变量有什么好处。 -
没错,但在整个代码中的许多类似情况下,他们都虔诚地遵循创建一个新的局部变量。