java使用map.getOrDefault()和Optional.ofNullable().orElse()默认值赋值踩坑

    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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容