我正在测试ConcurrentHashMapOracle的Java 8实现:
ConcurrentMap<String, String> concurrentMap = new ConcurrentHashMap<>();
String result = concurrentMap.computeIfAbsent("A", k -> "B");
System.out.println(result); // "B"
result = concurrentMap.putIfAbsent("AA", "BB");
System.out.println(result); // null
Run Code Online (Sandbox Code Playgroud)
实施要求:
默认实现等效于此映射的以下步骤,然后返回当前值,如果现在不存在则返回null:
Run Code Online (Sandbox Code Playgroud)if (map.get(key) == null) { V newValue = mappingFunction.apply(key); if (newValue != null) return map.putIfAbsent(key, newValue); }
它表示然后返回当前值,如果现在不存在则返回null.那不应该回来null吗?鉴于这putIfAbsent也正在回归null.
我在这里错过了什么?