!=null
的判断方式,可能只需要一秒! 看起来不起眼的问题,其实暗藏深坑。一、空指针异常为何如此常见?
null
啊,老哥!习惯性地写 if (obj != null)
,确实能解决问题,但代码里到处都是这种判断,视觉上和逻辑上都让人头大。二、数据类型大集合:判断空值的正确姿势
1. 确认数据类型
null
,别慌。确定类型很重要,不同类型用的方法也不一样,看看咱们会碰到的类型:字符串 ( String
)普通对象 ( Object
)集合 ( List
和Map
)数组 ( Array
)
null
判断,直接用工具类,一行代码搞定!2. 工具类介绍
null
和空的双重判断,避免出错。三、工具类的正确打开方式
1. 字符串判断:StringUtils.isEmpty()
if (str != null && !str.isEmpty()) {
// 做点啥
}
if (StringUtils.isEmpty(str)) {
// 更简洁了
}
自动帮你判断 null
。避免手误写错逻辑。
2. 对象判断:ObjectUtils.isEmpty()
ObjectUtils.isEmpty()
,它支持字符串、集合、数组等多种类型:if (ObjectUtils.isEmpty(obj)) {
// 更优雅!
}
ObjectUtils.isEmpty()
不支持子元素的 null
判断,比如一个集合的某些元素是空值,需要单独处理。3. 集合判断:CollectionUtils.isEmpty()
CollectionUtils.isEmpty()
:if (CollectionUtils.isEmpty(list)) {
// 集合为 null 或为空
}
CollectionUtils.isEmpty()
的核心逻辑:先判断集合是否为 null
。再判断集合的 size()
是否为 0。
4. 数组判断:Arrays.stream()
Arrays.stream()
结合 allMatch()
来判断是否全为空:if (array != null && Arrays.stream(array).allMatch(Objects::isNull)) {
// 数组内的所有元素均为 null
}
四、特殊场景处理:子元素也需要检查
null
也是个坑。比如,一个 List
里可能有空值,这种情况怎么处理呢?1. 集合中元素是否为空
Arrays.stream()
来解决:if (list != null && list.stream().allMatch(Objects::isNull)) {
// 集合内所有元素为 null
}
2. 数组中元素是否为空
Arrays.stream()
:if (array != null && Arrays.stream(array).anyMatch(Objects::nonNull)) {
// 数组内至少有一个非空元素
}
五、写点源码:工具类背后的逻辑
1. ObjectUtils.isEmpty()
方法解析
如果是 null
,直接返回true
。如果是 CharSequence
,调用length()
判断。如果是数组,检查 length
。如果是集合或 Map,判断 isEmpty()
。
public static boolean isEmpty(@Nullable Object obj) {
if (obj == null) {
return true;
} else if (obj instanceof CharSequence) {
return ((CharSequence) obj).length() == 0;
} else if (obj instanceof Collection) {
return ((Collection<?>) obj).isEmpty();
} else if (obj instanceof Map) {
return ((Map<?, ?>) obj).isEmpty();
} else if (obj.getClass().isArray()) {
return Array.getLength(obj) == 0;
} else {
return false;
}
}
六、让代码更优雅的小 Tips
1. 用 Optional
代替 null
Optional
是 Java 8 引入的工具,用来优雅地避免空值问题。比如:Optional<String> optionalStr = Optional.ofNullable(str);
optionalStr.ifPresent(System.out::println);
2. 尽量用工具类
3. 少用嵌套判断
if
判断不仅难看,还容易埋雷。用工具类和流操作,让代码更清晰。!=null
,不仅能提升代码的质量,还能让你的日常开发更轻松。说实话,每次写 !=null
都感觉像在给自己挖坑,工具类一行搞定,不香吗?😂-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。