gpt4 book ai didi

JDK 中的 java 代码风格问题,例如 if ((t = table) != null)

转载 作者:行者123 更新时间:2023-12-02 01:26:21 26 4
gpt4 key购买 nike

在检查 JDK 中的源代码时,我遇到了一个始终让我困惑的问题。下面是 ConcurrentHashMap 的代码片段。为什么不直接使用table变量呢?而是将其分配给 t 本地变量。这是java中推荐的样式吗?

public boolean containsValue(Object value) {
if (value == null)
throw new NullPointerException();
Node<K,V>[] t;
if ((**t** = **table**) != null) {
Traverser<K,V> it = new Traverser<K,V>(**t**, **t**.length, 0, t.length);
for (Node<K,V> p; (p = it.advance()) != null; ) {
V v;
if ((v = p.val) == value || (v != null && value.equals(v)))
return true;
}
}
return false;
}

最佳答案

如果您正在运行多个线程,则 table 可能会被另一个线程更改,并在该方法中途变为 null。但是t不能在其他地方改变,因为它只存在于这个方法内部。这是避免可能出现异常的一种方法。

关于JDK 中的 java 代码风格问题,例如 if ((t = table) != null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56861163/

26 4 0