Java判断null的几种方式及适用场景分析

 更新时间:2025年05月12日 09:18:40   作者:数据库那些事儿  
在 Java 中,判断对象是否为 null 是编程中最常见的操作之一,以下是几种主要的判断方式及其适用场景,感兴趣的朋友一起看看吧

在 Java 中,判断对象是否为 null 是编程中最常见的操作之一。以下是几种主要的判断方式及其适用场景:

一、直接使用 == null(最基础)

if (obj == null) {
    // 对象为 null 的处理逻辑
}
  • 优点:简单直接,性能最优(无额外方法调用)。
  • 缺点:需要手动处理每个对象,代码冗余。
  • 适用场景:任何场景,尤其是性能敏感的代码。

二、Objects.isNull ()(JDK 8+)

import java.util.Objects;
if (Objects.isNull(obj)) {
    // 对象为 null 的处理逻辑
}
  • 优点:语义清晰,Null 安全(传入 null 不会 NPE)。
  • 缺点:本质是对 == null 的封装,性能略低于直接判断。
  • 适用场景:代码可读性要求高,避免空指针风险。

三、Objects.nonNull ()(JDK 8+)

if (Objects.nonNull(obj)) {
    // 对象不为 null 的处理逻辑
}
  • 优点:与 Objects.isNull() 配对,语义明确。
  • 适用场景:与 Stream、Optional 等结合使用。

四、Optional 类(JDK 8+)

import java.util.Optional;
Optional<String> optional = Optional.ofNullable(obj);
if (optional.isPresent()) {
    // 对象不为 null 的处理逻辑
} else {
    // 对象为 null 的处理逻辑
}
// 更优雅的用法(避免 if-else)
optional.ifPresent(value -> System.out.println(value));
  • 优点:强制开发者处理 null 情况,避免 NPE;支持链式操作。
  • 缺点:代码略显繁琐,适合复杂流程处理。
  • 适用场景:处理可能缺失值的函数式编程,避免深层嵌套的 null 检查。

五、Apache Commons Lang(第三方库)

import org.apache.commons.lang3.ObjectUtils;
if (ObjectUtils.isEmpty(obj)) {
    // 对象为 null 或空(适用于字符串、集合等)
}
if (ObjectUtils.isNotEmpty(obj)) {
    // 对象不为 null 且非空
}
  • 优点:提供更丰富的空值判断(如空字符串、空集合)。
  • 缺点:需引入依赖。
  • 适用场景:需要统一处理多种类型空值的场景。

六、StringUtils(Apache Commons Lang)

专门用于字符串的空值判断:

import org.apache.commons.lang3.StringUtils;
if (StringUtils.isBlank(str)) {
    // 字符串为 null、空字符串或仅含空格
}
if (StringUtils.isEmpty(str)) {
    // 字符串为 null 或空字符串(不检查空格)
}
  • 优点:处理字符串时更全面,避免 str.length() == 0 的 NPE 风险。
  • 适用场景:字符串处理场景。

七、三元运算符(简化赋值)

// 对象为 null 时赋默认值
String result = (obj == null) ? "default" : obj;
// 等价于
String result;
if (obj == null) {
    result = "default";
} else {
    result = obj;
}
  • 优点:代码简洁,适合简单赋值场景。
  • 缺点:逻辑复杂时可读性下降。

八、使用断言(开发阶段)

import static org.junit.Assert.assertNotNull;
// 在测试或开发阶段强制要求对象非空
assertNotNull(obj, "对象不能为 null");
  • 优点:快速定位问题,避免错误数据流入后续流程。
  • 缺点:断言默认在生产环境禁用,不可用于业务逻辑判断。
  • 适用场景:单元测试、方法参数校验。

性能对比

方式性能(相对)
== null最快
Objects.isNull()接近 ==
Optional较慢(涉及对象创建)

最佳实践

  • 优先使用 == null:简单场景直接判断,性能最优。
  • 复杂流程用 Optional:避免深层嵌套的 null 检查,提高代码可读性。
  • 字符串处理用 StringUtils:避免 str.isEmpty() 的 NPE 风险。
  • 集合 / 数组用 CollectionUtils.isEmpty():统一处理多种类型的空值。
  • 避免过度使用 Optional:简单场景直接判断更清晰,滥用会导致代码冗余。

示例对比

传统方式

if (user != null && user.getAddress() != null && user.getAddress().getCity() != null) {
    System.out.println(user.getAddress().getCity());
}

Optional 方式

Optional.ofNullable(user)
        .map(User::getAddress)
        .map(Address::getCity)
        .ifPresent(System.out::println);

根据场景选择合适的判断方式,既能保证代码健壮性,又能提升可读性。

到此这篇关于Java判断null的几种方式的文章就介绍到这了,更多相关Java判断null内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot JS-SDK自定义微信分享的实现

    SpringBoot JS-SDK自定义微信分享的实现

    这篇文章主要介绍了SpringBoot JS-SDK自定义微信分享的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java线程实现的两种方式解析

    Java线程实现的两种方式解析

    这篇文章主要介绍了Java线程实现的两种方式解析,注意在构造器中启动这个线程的话,很容易造成this逃逸的问题,这是要注意的,这是通过直接集成thread来成为线程,同时在这种情况下,你可以通过调用合适的方法来,需要的朋友可以参考下
    2024-01-01
  • 监控Spring Boot 项目运行情况操作方法

    监控Spring Boot 项目运行情况操作方法

    在实际开发中,经常会遇到想要获取到服务器应用的运行情况的场景,在微服务架构下对于每个应用运行情况的监控是保证系统高可用的关键,本文给大家介绍如何实现在Spring Boot的jar包中对系统的运行情况进行监控操作,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 一文解开java中字符串编码的小秘密(干货)

    一文解开java中字符串编码的小秘密(干货)

    这篇文章主要介绍了一文解开java中字符串编码的小秘密(干货),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 腾讯开源消息中间件TubeMQ总体介绍分析

    腾讯开源消息中间件TubeMQ总体介绍分析

    这篇文章主要为大家介绍了腾讯开源消息中间件TubeMQ的总体介绍分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • elasticsearch数据信息索引操作action support示例分析

    elasticsearch数据信息索引操作action support示例分析

    这篇文章主要为大家介绍了elasticsearch数据信息索引操作action support示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • 微服务架构之使用RabbitMQ进行异步处理方式

    微服务架构之使用RabbitMQ进行异步处理方式

    本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在Spring Boot项目中使用RabbitMQ解决高并发问题,RabbitMQ是一种流行的消息队列实现,支持异步通信,可以有效解耦应用程序的不同部分,并将任务分发给多个消费者
    2025-02-02
  • java中main函数你知道多少

    java中main函数你知道多少

    大家好,本篇文章主要讲的是java中main函数你知道多少,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Java开发人员最常犯的5个错误总结

    Java开发人员最常犯的5个错误总结

    作为一名java开发程序员,不知道大家有没有遇到过一些匪夷所思的bug。这些错误通常需要您几个小时才能解决。今天,小编总结一些常见的编码错误,然后给出解决方案。希望大家在日常编码中能够避免这样的问题
    2022-12-12
  • Java详解Swing中的几种常用按钮的使用

    Java详解Swing中的几种常用按钮的使用

    这篇文章主要介绍了怎么用Java来创建和使用Swing中的几种常用按钮,按钮是我们经常要用的工具,但是你有想过自己怎么去实现它吗,感兴趣的朋友跟随文章往下看看吧
    2022-04-04

最新评论