首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

改变!=null 的判断,只需一秒!

改变 !=null 的判断方式,可能只需要一秒! 看起来不起眼的问题,其实暗藏深坑。

一、空指针异常为何如此常见?

空指针异常简直是 Bug 界的“钉子户”,各种语言都少不了它的身影。Java 尤其显得格外亲切,分分钟冒出来提醒你:对象是 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 都感觉像在给自己挖坑,工具类一行搞定,不香吗?

所以,别再犹豫了,用上这些小技巧,让你的代码看起来更专业、更优雅!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OAgWQuHcRGYJ21bJo1KMsoxw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券