亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java判斷null的幾種方式及適用場景分析

 更新時間:2025年05月12日 09:18:40   作者:數(shù)據(jù)庫那些事兒  
在 Java 中,判斷對象是否為?null?是編程中最常見的操作之一,以下是幾種主要的判斷方式及其適用場景,感興趣的朋友一起看看吧

在 Java 中,判斷對象是否為 null 是編程中最常見的操作之一。以下是幾種主要的判斷方式及其適用場景:

一、直接使用 == null(最基礎(chǔ))

if (obj == null) {
    // 對象為 null 的處理邏輯
}
  • 優(yōu)點:簡單直接,性能最優(yōu)(無額外方法調(diào)用)。
  • 缺點:需要手動處理每個對象,代碼冗余。
  • 適用場景:任何場景,尤其是性能敏感的代碼。

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

import java.util.Objects;
if (Objects.isNull(obj)) {
    // 對象為 null 的處理邏輯
}
  • 優(yōu)點:語義清晰,Null 安全(傳入 null 不會 NPE)。
  • 缺點:本質(zhì)是對 == null 的封裝,性能略低于直接判斷。
  • 適用場景:代碼可讀性要求高,避免空指針風(fēng)險。

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

if (Objects.nonNull(obj)) {
    // 對象不為 null 的處理邏輯
}
  • 優(yōu)點:與 Objects.isNull() 配對,語義明確。
  • 適用場景:與 Stream、Optional 等結(jié)合使用。

四、Optional 類(JDK 8+)

import java.util.Optional;
Optional<String> optional = Optional.ofNullable(obj);
if (optional.isPresent()) {
    // 對象不為 null 的處理邏輯
} else {
    // 對象為 null 的處理邏輯
}
// 更優(yōu)雅的用法(避免 if-else)
optional.ifPresent(value -> System.out.println(value));
  • 優(yōu)點:強(qiáng)制開發(fā)者處理 null 情況,避免 NPE;支持鏈?zhǔn)讲僮鳌?/li>
  • 缺點:代碼略顯繁瑣,適合復(fù)雜流程處理。
  • 適用場景:處理可能缺失值的函數(shù)式編程,避免深層嵌套的 null 檢查。

五、Apache Commons Lang(第三方庫)

import org.apache.commons.lang3.ObjectUtils;
if (ObjectUtils.isEmpty(obj)) {
    // 對象為 null 或空(適用于字符串、集合等)
}
if (ObjectUtils.isNotEmpty(obj)) {
    // 對象不為 null 且非空
}
  • 優(yōu)點:提供更豐富的空值判斷(如空字符串、空集合)。
  • 缺點:需引入依賴。
  • 適用場景:需要統(tǒng)一處理多種類型空值的場景。

六、StringUtils(Apache Commons Lang)

專門用于字符串的空值判斷:

import org.apache.commons.lang3.StringUtils;
if (StringUtils.isBlank(str)) {
    // 字符串為 null、空字符串或僅含空格
}
if (StringUtils.isEmpty(str)) {
    // 字符串為 null 或空字符串(不檢查空格)
}
  • 優(yōu)點:處理字符串時更全面,避免 str.length() == 0 的 NPE 風(fēng)險。
  • 適用場景:字符串處理場景。

七、三元運算符(簡化賦值)

// 對象為 null 時賦默認(rèn)值
String result = (obj == null) ? "default" : obj;
// 等價于
String result;
if (obj == null) {
    result = "default";
} else {
    result = obj;
}
  • 優(yōu)點:代碼簡潔,適合簡單賦值場景。
  • 缺點:邏輯復(fù)雜時可讀性下降。

八、使用斷言(開發(fā)階段)

import static org.junit.Assert.assertNotNull;
// 在測試或開發(fā)階段強(qiáng)制要求對象非空
assertNotNull(obj, "對象不能為 null");
  • 優(yōu)點:快速定位問題,避免錯誤數(shù)據(jù)流入后續(xù)流程。
  • 缺點:斷言默認(rèn)在生產(chǎn)環(huán)境禁用,不可用于業(yè)務(wù)邏輯判斷。
  • 適用場景:單元測試、方法參數(shù)校驗。

性能對比

方式性能(相對)
== null最快
Objects.isNull()接近 ==
Optional較慢(涉及對象創(chuàng)建)

最佳實踐

  • 優(yōu)先使用 == null:簡單場景直接判斷,性能最優(yōu)。
  • 復(fù)雜流程用 Optional:避免深層嵌套的 null 檢查,提高代碼可讀性。
  • 字符串處理用 StringUtils:避免 str.isEmpty() 的 NPE 風(fēng)險。
  • 集合 / 數(shù)組用 CollectionUtils.isEmpty():統(tǒng)一處理多種類型的空值。
  • 避免過度使用 Optional:簡單場景直接判斷更清晰,濫用會導(dǎo)致代碼冗余。

示例對比

傳統(tǒng)方式

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);

根據(jù)場景選擇合適的判斷方式,既能保證代碼健壯性,又能提升可讀性。

到此這篇關(guān)于Java判斷null的幾種方式的文章就介紹到這了,更多相關(guān)Java判斷null內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot JS-SDK自定義微信分享的實現(xiàn)

    SpringBoot JS-SDK自定義微信分享的實現(xiàn)

    這篇文章主要介紹了SpringBoot JS-SDK自定義微信分享的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java線程實現(xiàn)的兩種方式解析

    Java線程實現(xiàn)的兩種方式解析

    這篇文章主要介紹了Java線程實現(xiàn)的兩種方式解析,注意在構(gòu)造器中啟動這個線程的話,很容易造成this逃逸的問題,這是要注意的,這是通過直接集成thread來成為線程,同時在這種情況下,你可以通過調(diào)用合適的方法來,需要的朋友可以參考下
    2024-01-01
  • 監(jiān)控Spring Boot 項目運行情況操作方法

    監(jiān)控Spring Boot 項目運行情況操作方法

    在實際開發(fā)中,經(jīng)常會遇到想要獲取到服務(wù)器應(yīng)用的運行情況的場景,在微服務(wù)架構(gòu)下對于每個應(yīng)用運行情況的監(jiān)控是保證系統(tǒng)高可用的關(guān)鍵,本文給大家介紹如何實現(xiàn)在Spring Boot的jar包中對系統(tǒng)的運行情況進(jìn)行監(jiān)控操作,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 一文解開java中字符串編碼的小秘密(干貨)

    一文解開java中字符串編碼的小秘密(干貨)

    這篇文章主要介紹了一文解開java中字符串編碼的小秘密(干貨),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 騰訊開源消息中間件TubeMQ總體介紹分析

    騰訊開源消息中間件TubeMQ總體介紹分析

    這篇文章主要為大家介紹了騰訊開源消息中間件TubeMQ的總體介紹分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • elasticsearch數(shù)據(jù)信息索引操作action?support示例分析

    elasticsearch數(shù)據(jù)信息索引操作action?support示例分析

    這篇文章主要為大家介紹了elasticsearch數(shù)據(jù)信息索引操作action?support示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 微服務(wù)架構(gòu)之使用RabbitMQ進(jìn)行異步處理方式

    微服務(wù)架構(gòu)之使用RabbitMQ進(jìn)行異步處理方式

    本文介紹了RabbitMQ的基本概念、異步調(diào)用處理邏輯、RabbitMQ的基本使用方法以及在Spring Boot項目中使用RabbitMQ解決高并發(fā)問題,RabbitMQ是一種流行的消息隊列實現(xiàn),支持異步通信,可以有效解耦應(yīng)用程序的不同部分,并將任務(wù)分發(fā)給多個消費者
    2025-02-02
  • java中main函數(shù)你知道多少

    java中main函數(shù)你知道多少

    大家好,本篇文章主要講的是java中main函數(shù)你知道多少,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java開發(fā)人員最常犯的5個錯誤總結(jié)

    Java開發(fā)人員最常犯的5個錯誤總結(jié)

    作為一名java開發(fā)程序員,不知道大家有沒有遇到過一些匪夷所思的bug。這些錯誤通常需要您幾個小時才能解決。今天,小編總結(jié)一些常見的編碼錯誤,然后給出解決方案。希望大家在日常編碼中能夠避免這樣的問題
    2022-12-12
  • Java詳解Swing中的幾種常用按鈕的使用

    Java詳解Swing中的幾種常用按鈕的使用

    這篇文章主要介紹了怎么用Java來創(chuàng)建和使用Swing中的幾種常用按鈕,按鈕是我們經(jīng)常要用的工具,但是你有想過自己怎么去實現(xiàn)它嗎,感興趣的朋友跟隨文章往下看看吧
    2022-04-04

最新評論