public static void main(String[] args) {
Map<String, Integer> map = new HashMap();
map.put("1",1);
map.put("2",2);
map.put("3",3);
AtomicInteger atomicInteger = new AtomicInteger(3);
for(int i = 1; i <= 5; i++){
System.out.println(map.getOrDefault(String.valueOf(i),atomicInteger.addAndGet(1)));
// System.out.println(Optional.ofNullable(map.get(String.valueOf(i))).orElse(atomicInteger.addAndGet(1)));
// Integer i1 = map.get(String.valueOf(i));
// if(Objects.isNull(i1)){
// i1 = atomicInteger.addAndGet(1);
// }
// System.out.println(i1);
}
System.out.println(atomicInteger.get());
}
期望最后atomicInteger的值是5,但是使用map.getOrDefault()和Optional.ofNullable().orElse()这两种方式会返回8,这两种方式每次循环都会执行atomicInteger.addAndGet(1),不管map中是否已包含。
image.png