打赏

jdk8 map.getOrDefault需要注意一点

jdk8 对map新增了一个方法map.getOrDefault(key, defaultValue),相比如map.get,前者在有值的时候返回值,无值的时候(null和空串)返回指定的defaultValue

今天发现getOrDefault方法特定情况下结果与预期不符,研究了一下,是这样的:

但是进行map.put后,如果key的value为null,对应key的getOrDefault方法失效

如下:

    Map<String, Object> map=new HashMap<String,Object>();
    System.out.println(map.get("yanan"));//打印null
    System.out.println(map.getOrDefault("yanan", 1));//打印1
    
    map.put("yanan", null);
    System.out.println(map.get("yanan"));//打印null
    System.out.println(map.getOrDefault("yanan", 1));//打印null

如果不为null,为空或其他字符,仍旧生效

    Map<String, Object> map=new HashMap<String,Object>();
    System.out.println(map.get("yanan"));//打印null
    System.out.println(map.getOrDefault("yanan", 1));//打印1
    
    map.put("yanan", "");
    System.out.println(map.get("yanan"));//打印空串
    System.out.println(map.getOrDefault("yanan", 1));//打印空串

 

 

    Map<String, Object> map=new HashMap<String,Object>();
    System.out.println(map.get("yanan"));//打印null
    System.out.println(map.getOrDefault("yanan", 1));//打印1

    map.put("yanan", 2);
    System.out.println(map.get("yanan"));//打印2
    System.out.println(map.getOrDefault("yanan", 1));//打印2

 

posted @ 2020-05-20 10:24  每天都要学一点  阅读(996)  评论(0编辑  收藏  举报