了解Java源代码:为什么这种空处理逻辑如此复杂?

Trầ*_* Dự 6 java null

我正在阅读JDK源代码。我public Collection<V> values()在课堂上看到一个方法HashMap

   public Collection<V> values() {
        Collection<V> vs = values;
        if (vs == null) {
            vs = new Values();
            values = vs;
        }
        return vs;
    }
Run Code Online (Sandbox Code Playgroud)

但是我认为这种逻辑会更简短些:

public Collection<V> values() {
    if (values == null) {
        values = new Values();
    }
    return values;
}
Run Code Online (Sandbox Code Playgroud)

我认为这背后一定有原因。请告诉我为什么。