最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java判斷null的幾種方式及適用場(chǎng)景分析

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

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

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

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

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

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

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

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

四、Optional 類(JDK 8+)

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

五、Apache Commons Lang(第三方庫)

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

六、StringUtils(Apache Commons Lang)

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

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

七、三元運(yùn)算符(簡(jiǎn)化賦值)

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

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

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

性能對(duì)比

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

最佳實(shí)踐

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

示例對(duì)比

傳統(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ù)場(chǎng)景選擇合適的判斷方式,既能保證代碼健壯性,又能提升可讀性。

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

相關(guān)文章

  • java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流

    java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流

    這篇文章主要介紹了java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Maven部署報(bào)錯(cuò) “Cannot deploy artifacts when Maven is in offline mode”的解決方法

    Maven部署報(bào)錯(cuò) “Cannot deploy artifacts when&

    在日常Java開發(fā)中,Maven作為事實(shí)上的標(biāo)準(zhǔn)構(gòu)建工具,承擔(dān)著依賴管理、項(xiàng)目構(gòu)建、測(cè)試執(zhí)行、構(gòu)件部署等核心職責(zé),然而,即便是經(jīng)驗(yàn)豐富的開發(fā)者,也常常被這樣一個(gè)錯(cuò)誤卡住Cannot deploy artifacts when Maven is in offline mode,本文介紹了解決方案,需要的朋友可以參考下
    2025-11-11
  • springboot相關(guān)面試題匯總詳解

    springboot相關(guān)面試題匯總詳解

    這篇文章主要介紹了springboot相關(guān)面試題匯總詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java關(guān)鍵字之instanceof詳解

    Java關(guān)鍵字之instanceof詳解

    instanceof是Java的一個(gè)二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù)
    2021-11-11
  • java常見的字符串操作和日期操作匯總

    java常見的字符串操作和日期操作匯總

    本文主要對(duì)java 常見的字符串操作和日期操作進(jìn)行整理。具有一定的參考價(jià)值,需要的朋友一起來看下吧
    2016-12-12
  • 部署springboot項(xiàng)目到云服務(wù)器的兩種方式(jar+war)

    部署springboot項(xiàng)目到云服務(wù)器的兩種方式(jar+war)

    本文主要介紹了部署springboot項(xiàng)目到云服務(wù)器的兩種方式,主要介紹了jar和war兩種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Mybatis的類型轉(zhuǎn)換接口TypeHandler

    Mybatis的類型轉(zhuǎn)換接口TypeHandler

    這篇文章主要介紹了Mybatis的類型轉(zhuǎn)換接口TypeHandler,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • 教你用java?stream對(duì)集合中的對(duì)象按指定字段進(jìn)行分組并統(tǒng)計(jì)

    教你用java?stream對(duì)集合中的對(duì)象按指定字段進(jìn)行分組并統(tǒng)計(jì)

    這篇文章主要給大家介紹了關(guān)于用java?stream對(duì)集合中的對(duì)象按指定字段進(jìn)行分組并統(tǒng)計(jì)的相關(guān)資料,本文主要介紹了如何利用Java的Stream流來實(shí)現(xiàn)在list集合中,對(duì)具有相同name屬性的對(duì)象進(jìn)行匯總計(jì)算的需求,需要的朋友可以參考下
    2024-10-10
  • 用Java程序判斷是否是閏年的簡(jiǎn)單實(shí)例

    用Java程序判斷是否是閏年的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)硪黄肑ava程序判斷是否是閏年的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java實(shí)現(xiàn)序列化與反序列化的簡(jiǎn)單示例

    Java實(shí)現(xiàn)序列化與反序列化的簡(jiǎn)單示例

    序列化與反序列化是指Java對(duì)象與字節(jié)序列的相互轉(zhuǎn)換,一般在保存或傳輸字節(jié)序列的時(shí)候會(huì)用到,下面有兩個(gè)Java實(shí)現(xiàn)序列化與反序列化的簡(jiǎn)單示例,不過還是先來看看序列和反序列化的具體概念:
    2016-05-05

最新評(píng)論

莒南县| 桃园市| 金华市| 枞阳县| 无棣县| 伊宁市| 龙里县| 金门县| 阿合奇县| 静安区| 介休市| 渝中区| 井研县| 盘山县| 德昌县| 清苑县| 阿拉善左旗| 汕尾市| 克拉玛依市| 塘沽区| 响水县| 凤阳县| 南靖县| 泌阳县| 枝江市| 措美县| 金秀| 黔南| 壤塘县| 道孚县| 闽侯县| 方山县| 科技| 巴南区| 安顺市| 巨野县| 上犹县| 南和县| 禹城市| 阿拉尔市| 莲花县|