getOrDefault是Java 8为Map新增的安全取值方法,键存在则返回对应值(含null),不存在则返回指定默认值;它是只读操作,不修改Map,适用于简单默认值场景。

getOrDefault 是 Java 8 为 Map 接口新增的便捷方法,它能安全地获取键对应的值;如果键不存在,就直接返回你指定的默认值,避免了手动判空或调用 containsKey 的冗余代码。
基本用法:替代 if-else 判空
以前写法:
String value = map.get("key");
if (value == null) {
value = "default";
}
现在一行搞定:
String value = map.getOrDefault("key", "default");
注意:这里的 "default" 只在 "key" 完全不存在(或显式存了 null)时才生效。但如果 map 允许 null 值(如 HashMap),且你存过 map.put("key", null),那么 getOrDefault("key", "default") 仍会返回 null —— 因为键存在,只是值为 null。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
常用默认值类型示例
- 字符串:
map.getOrDefault("name", "未知用户") - 数字:
map.getOrDefault("age", 0)、map.getOrDefault("score", 0.0) - 集合:
map.getOrDefault("tags", Collections.emptyList())(推荐用不可变空集合,避免后续误修改) - 对象:
map.getOrDefault("config", new AppConfig())(注意:每次调用都会新建实例,如需复用建议提前创建好)
和 computeIfAbsent 的区别
getOrDefault 是只读操作,不改变 map 内容;而 computeIfAbsent 在键不存在时会执行函数并把结果存入 map:
// getOrDefault:不写入 String name = userMap.getOrDefault(userId, "游客"); // computeIfAbsent:键不存在时创建并缓存 User user = userMap.computeIfAbsent(userId, id -> fetchUserFromDB(id));
所以需要「懒加载+缓存」时选后者;仅想安全取值,用前者更轻量、语义更清晰。
实际使用小提醒
- 确保默认值类型与 map 的 value 类型兼容(编译期检查)
- 避免传入可变对象作为默认值(如 new ArrayList()),除非你明确希望每次调用都返回新实例
- 对并发场景,若用
ConcurrentHashMap,getOrDefault是线程安全的,但默认值构造逻辑本身不在同步范围内

















