为什么判空这么重要?
写Java代码时,对象突然变成null简直是家常便饭。想象一下,你调了个方法返回用户信息,结果它空空如也,如果你直接去操作,砰!程序立马崩给你看,满屏的NullPointerException能把人逼疯。这可不是小事,轻则功能失效,重则系统瘫痪。所以学会判空就像开车系安全带,关键时刻能救命。今天咱们就掰开揉碎,聊聊Java里那些高效又实用的判空技巧。

基础大招:直接用 == null 检查
判空最省事的法子就是 == null,简单粗暴效果好。甭管是自定义对象还是系统类,统统适用。代码写起来也贼顺手:
if (user == null) {
System.out.println("对象不存在,给个默认值吧!");
return new User("匿名用户"); // 处理空对象
} else {
user.displayInfo; // 安全操作
}
记住啊,基本类型像int、double可不会为null,别瞎检查浪费感情。数组也能用这招,但得小心空数组和null数组的区别——一个没元素,一个是压根不存在。
字符串判空:别踩isEmpty的坑
字符串判空最容易翻车。Java的isEmpty看着方便,但有个巨坑:如果字符串是null,调用isEmpty直接触发异常!正确姿势得双重检查:
if (input == null || input.isEmpty) {
System.out.println("输入无效,请重试");
// 处理空或空白输入
}
Java 11后多了isBlank这个神器,连空格、制表符都帮你过滤掉:
用input.isBlank替代isEmpty,处理用户输入时特别香,省得挨个trim。
集合判空:巧用Collections工具
List、Set这些集合判空也别蛮干。Java自带的Collections.isEmpty超贴心,一次搞定null和空集合:
List dataList = getDataFromAPI;
if (Collections.isEmpty(dataList)) {
System.out.println("数据源空空如也");
// 加载缓存数据
}
自己写也行,但别漏掉null检查:
- Map判空: if (myMap == null || myMap.isEmpty)
- 数组判空: if (array == null || array.length == 0)
Optional类:优雅避开NullPointer
Java 8的Optional真是救星,把判空玩出花来。用ofNullable包住可能为null的对象,再链式操作,代码瞬间清爽:
Optional.ofNullable(getUser)
.map(User::getName)
.ifPresent(name -> System.out.println("用户名:" + name));
搭配orElse更妙,空对象自动回退到默认值:
String city = userOpt.orElse(DEFAULT_USER).getCity —— 一行顶过去五行的if-else!
自定义对象判空实战
自己写的类怎么判空?加个isEmpty方法最实在。比如订单类:
public class Order {
private String id;
private List items;
public boolean isEmpty {
return id == null || Collections.isEmpty(items); // 关键字段全检查
}
业务中还能扩展逻辑:
- 电商场景:检查订单ID和商品列表
- 社交应用:验证用户昵称和头像非空
- 别忘了重写equals时带上null判断!
那些年踩过的判空坑
判空看着简单,暗坑可不少:
| 坑点 | 翻车现场 | 破解招数 |
|---|---|---|
| 链式调用 | user.getAddress.getCity | 拆解检查或用Optional链 |
| 自动拆箱 | int age = user.getAge // 返回null | 用Integer替代int |
| 过度防御 | 每个变量都if-null | 用@NonNull注解标记必填参数 |
最坑的是数据库查询——返回null还是空集合?约定好规范能少吵十次架。
最佳实践:写出健壮代码
判空玩得溜,代码质量飙升:
- 入口防御: 公共方法第一件事就是检查参数null,早发现早治疗
- 优先Optional: 返回可能空的值时,包成Optional更友好
- 单元测试覆盖: 专门写测试用例怼null、空字符串、空集合
- 工具加持: 用SonarQube扫null风险,Lombok的@NonNull自动生成检查代码
记住,好代码不是没bug,而是空对象来了也能优雅接住!
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/150044.html