getOrDefault是Map接口的安全取值方法,键存在时返回对应value,不存在时返回指定默认值,不修改原Map且避免NullPointerException。

Java 中 getOrDefault 是 Map 接口提供的一个安全取值方法,它能在键不存在时返回你指定的默认值,从而避免 get() 返回 null 后调用方法引发的 NullPointerException。
getOrDefault 的基本用法和参数含义
该方法签名是:V getOrDefault(Object key, V defaultValue)
其中 key 是要查找的键,defaultValue 是键不存在时返回的备用值。注意:这个默认值可以是任意非 null 或 null 值(取决于你的业务逻辑),且不会影响原 Map。
- 如果 key 存在,返回对应 value;
- 如果 key 不存在,直接返回传入的
defaultValue,不执行任何额外逻辑; - 返回值类型与 Map 的 value 类型一致,无需强制转换。
替代 if-else 判断,让代码更简洁安全
传统写法常需先判空再取值,容易遗漏或写错:
String name = map.get("name");
if (name == null) {
name = "未知";
}
用 getOrDefault 一行搞定:
String name = map.getOrDefault("name", "未知");
尤其适合链式调用场景,比如:
立即学习“Java免费学习笔记(深入)”;
// 安全获取并转大写,不会因 null 报 NPE
String upperName = map.getOrDefault("name", "").toUpperCase();
配合包装类和对象方法时的关键细节
对 Integer、Boolean 等包装类,要注意默认值是否符合语义:
-
map.getOrDefault("age", 0)返回 int 0,适合做计算; -
map.getOrDefault("active", false)可直接用于条件判断; - 若默认值为
null(如map.getOrDefault("code", null)),虽语法合法,但后续仍可能触发 NPE,应避免这种“假安全”写法。
和 computeIfAbsent、computeIfPresent 的区别
getOrDefault 是只读操作,不修改 Map;而:
-
computeIfAbsent在 key 不存在时才计算并插入新值; -
computeIfPresent仅在 key 存在时对原 value 做变换; - 它们都涉及修改行为,性能和语义与
getOrDefault不同,别混用。


















