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