Java?空和null的區(qū)別
前言 StringUtils
提示:這里可以添加本文要記錄的大概內(nèi)容:
StringUtils
是 Apache Commons Lang 庫中提供的一個(gè)工具類,專為處理 java.lang.String
類型的對(duì)象而設(shè)計(jì)。這個(gè)類提供了大量靜態(tài)方法,用于執(zhí)行各種常見的字符串操作,如檢查空值、空白字符處理、比較、查找、截取、轉(zhuǎn)換、拆分、拼接、填充、修剪等。StringUtils
類旨在作為 Java 標(biāo)準(zhǔn)庫中 String
類方法的補(bǔ)充,提供更加便捷、高效且 null 安全的字符串處理功能。
以下幾個(gè)方面概括了 StringUtils
的核心特點(diǎn)和用途:
Null-safe 字符串操作:
StringUtils
方法通常會(huì)處理null
值輸入,避免直接調(diào)用String
類方法時(shí)可能引發(fā)的NullPointerException
。例如,StringUtils.isEmpty(null)
會(huì)返回true
,而不是拋出異常。空值與空白字符檢查:
提供了一系列方法用于檢查字符串是否為空、空字符串、僅包含空白字符或非空白字符:isEmpty(String str)
: 檢查字符串是否為null
或長度為 0。isNotEmpty(String str)
: 恰好與isEmpty
相反,檢查字符串是否非空(既不是null
也不是長度為 0)。isBlank(String str)
: 檢查字符串是否為null
、長度為 0 或僅包含空白字符(如空格、制表符、換行符等)。isNotBlank(String str)
: 恰好與isBlank
相反,檢查字符串是否非空且非空白。
字符串修剪:
提供了方法來去除字符串兩端的空白字符:trim(String str)
: 返回去除兩端空白字符后的字符串副本。trimToNull(String str)
: 去除兩端空白字符,若結(jié)果為空字符串,則返回null
。trimToEmpty(String str)
: 去除兩端空白字符,若輸入為null
,則返回空字符串。
字符串比較:
提供了多種字符串比較方式,包括忽略大小寫、忽略空白等:equals(String str1, String str2)
: 安全地比較兩個(gè)字符串是否相等。equalsIgnoreCase(String str1, String str2)
: 同上,但忽略大小寫。compare(String str1, String str2)
: 比較兩個(gè)字符串的字典順序,返回整數(shù)結(jié)果。
字符串拼接與拆分:
提供了替代String
類concat
方法的拼接方法,以及基于特定分隔符的字符串拆分方法:join(Object[] array, String separator)
: 將數(shù)組中的元素連接成一個(gè)字符串,用指定分隔符隔開。split(String str, String separatorChars)
: 根據(jù)給定的分隔符將字符串分割成一個(gè)字符串?dāng)?shù)組。
以及其他實(shí)用方法:
包括但不限于查找子字符串、提取子字符串、重復(fù)字符串、檢查字符串是否以特定字符開頭/結(jié)尾、轉(zhuǎn)換字符串為駝峰式/下劃線式等。
使用 StringUtils
類的主要優(yōu)點(diǎn)在于其簡化了字符串處理邏輯,增強(qiáng)了代碼可讀性,同時(shí)提供了對(duì) null
值的安全處理,有助于減少潛在的運(yùn)行時(shí)錯(cuò)誤。在Java開發(fā)中,尤其是在處理用戶輸入、數(shù)據(jù)清洗、配置解析、日志記錄、數(shù)據(jù)序列化與反序列化等場景中,StringUtils
類方法常被廣泛應(yīng)用。要使用這些方法,需確保已將 org.apache.commons:commons-lang3
庫添加到項(xiàng)目的依賴中。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
當(dāng)然可以,接下來我將通過代碼示例進(jìn)一步詳細(xì)闡述Java中"空"和"null"的區(qū)別:
1. 空(empty):
字符串:
String emptyString = ""; System.out.println(emptyString.length()); // 輸出:0 System.out.println(emptyString.isEmpty()); // 輸出:true
以上代碼創(chuàng)建了一個(gè)空字符串""
,其length()
方法返回0,表示沒有包含任何字符。同時(shí),isEmpty()
方法返回true
,進(jìn)一步驗(yàn)證這是一個(gè)空字符串。
集合:
List<String> emptyList = new ArrayList<>(); System.out.println(emptyList.size()); // 輸出:0 System.out.println(emptyList.isEmpty()); // 輸出:true Set<String> emptySet = new HashSet<>(); System.out.println(emptySet.size()); // 輸出:0 System.out.println(emptySet.isEmpty()); // 輸出:true
這里創(chuàng)建了兩個(gè)空集合:一個(gè)空的ArrayList
和一個(gè)空的HashSet
。它們的size()
方法都返回0,表示沒有包含任何元素。isEmpty()
方法均返回true
,確認(rèn)它們是空集合。
2. null:
引用類型變量:
String nullString = null; List<String> nullList = null; try { System.out.println(nullString.length()); // 拋出 NullPointerException System.out.println(nullList.size()); // 拋出 NullPointerException } catch (NullPointerException e) { System.out.println("Caught NullPointerException"); }
上述代碼中,nullString
和nullList
分別被賦值為null
。當(dāng)試圖調(diào)用它們的length()
和size()
方法時(shí),會(huì)拋出NullPointerException
,因?yàn)樗鼈儾⑽粗赶蛉魏螌?shí)際對(duì)象。在實(shí)際編程中,需要通過條件判斷或使用Objects.requireNonNull()
等方法來避免此類異常。
基本類型變量:
int primitiveInt = 0; Integer objectInt = null; System.out.println(primitiveInt); // 輸出:0 System.out.println(objectInt); // 輸出:null
這里展示了基本類型變量(primitiveInt
)與包裝類型變量(objectInt
)的區(qū)別?;绢愋妥兞坎荒苋?code>null值,如primitiveInt
被賦值為0,輸出其值為0。而包裝類型變量可以取null
值,如objectInt
被賦值為null
,輸出其值為null
。
3. isBlank
isBlank
包括了 empty
的檢查范圍,即 null 和空字符串
StringUtils.isBlank
:是空字符串、只包含空白字符!StringUtils.isBlank
:非空字符串、不只包含空白字符
StringUtils.isBlank
是 Apache Commons Lang 庫中提供的一個(gè)實(shí)用方法,用于判斷給定的字符串是否為空白。這里的“空白”不僅包括空字符串(""
),還包括只包含空白字符(如空格、制表符、換行符等)的字符串。具體來說,StringUtils.isBlank
方法的行為如下:
空字符串 (
""
):如果輸入的字符串長度為零(即沒有任何字符),則認(rèn)為是空白。只包含空白字符的字符串:如果輸入的字符串中所有字符都是空白字符,如空格(
' '
, ASCII 32)、制表符(\t
, ASCII 9)、換行符(\n
, ASCII 10)、回車符(\r
, ASCII 13)以及其他Unicode空白字符(如不間斷空格、窄空格等),則認(rèn)為是空白。非空白字符串:如果輸入的字符串包含至少一個(gè)非空白字符,則認(rèn)為不是空白。
簡而言之,StringUtils.isBlank
方法旨在檢測一個(gè)字符串是否既無實(shí)質(zhì)內(nèi)容又無意義,即要么完全沒有字符,要么全部由空白字符組成。在編程實(shí)踐中,此方法常用于數(shù)據(jù)驗(yàn)證、清理或格式化,幫助開發(fā)者快速判斷一個(gè)字符串是否需要進(jìn)一步處理或是否可以視為無效輸入。
使用示例:
import org.apache.commons.lang3.StringUtils; public class Example { public static void main(String[] args) { String emptyString = ""; String whitespaceString = " "; String nonEmptyString = "Hello, World!"; System.out.println(StringUtils.isBlank(emptyString)); // 輸出:true System.out.println(StringUtils.isBlank(whitespaceString)); // 輸出:true System.out.println(StringUtils.isBlank(nonEmptyString)); // 輸出:false } }
在這個(gè)示例中,StringUtils.isBlank
分別判斷了空字符串、只包含空白字符的字符串和非空白字符串,輸出結(jié)果反映了它們是否被識(shí)別為空白。
總結(jié):
通過上述代碼示例,我們可以更直觀地看到Java中"空"(empty)和"null"的區(qū)別:
- “空”(empty)表示容器(如字符串、集合等)內(nèi)沒有內(nèi)容,它們是實(shí)際存在的對(duì)象,可以進(jìn)行各種對(duì)象操作(如計(jì)算長度、檢查是否為空等),但通常不包含有意義的數(shù)據(jù)。
- "null"表示引用沒有指向任何對(duì)象,對(duì)
null
引用進(jìn)行對(duì)象方法調(diào)用或?qū)傩栽L問會(huì)拋出NullPointerException
。在使用引用類型變量時(shí),需要特別注意處理可能的null
值,以避免運(yùn)行時(shí)異常?;绢愋妥兞坎荒苋?code>null值。
到此這篇關(guān)于Java 空和null是兩回事的文章就介紹到這了,更多相關(guān)Java 空和null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java判斷object對(duì)象為空(包括null ,““)的方法
- 為什么Java項(xiàng)目中別用!=null做判空
- java?poi?讀取單元格null或者空字符串方式
- Java中l(wèi)ist集合為空或?yàn)閚ull的區(qū)別說明
- JAVA8妙用Optional解決判斷Null為空的問題方法
- Java不要再使用!=null判空了!
- 詳解Java去除json數(shù)據(jù)中的null空值問題
- Java判斷對(duì)象是否為空(包括null ,"")的方法
- java json不生成null或者空字符串屬性(詳解)
- 由@NotNull注解引出的關(guān)于Java空指針的控制
- java中判斷String類型為空和null的幾種方法
相關(guān)文章
Spring中@RequestParam與@RequestBody的使用場景詳解
這篇文章主要介紹了Spring中@RequestParam與@RequestBody的使用場景詳解,注解@RequestParam接收的參數(shù)是來自requestHeader中即請(qǐng)求頭或body請(qǐng)求體,通常用于GET請(qǐng)求,比如常見的url等,需要的朋友可以參考下2023-12-12如何理解Java中基類子對(duì)象的構(gòu)建過程從"基類向外"進(jìn)行擴(kuò)散的?
今天小編就為大家分享一篇關(guān)于如何理解Java中基類子對(duì)象的構(gòu)建過程從"基類向外"進(jìn)行擴(kuò)散的?,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04java線程之用Thread類創(chuàng)建線程的方法
本篇文章介紹了,Thread類創(chuàng)建線程的方法。需要的朋友參考下2013-05-05關(guān)于JavaEE內(nèi)部類的部分注意事項(xiàng)
這篇文章主要介紹了關(guān)于JavaEE內(nèi)部類的部分注意事項(xiàng),將一個(gè)類定義在另一個(gè)類里面或者一個(gè)方法里面,這樣的類稱為內(nèi)部類,這是一種封裝思想,那么使用內(nèi)部類的時(shí)候要注意些什么呢,讓我們一起來看看吧2023-03-03java將XML文檔轉(zhuǎn)換成json格式數(shù)據(jù)的示例
本篇文章主要介紹了java將XML文檔轉(zhuǎn)換成json格式數(shù)據(jù)的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12java讀取配置文件自定義字段(yml、properties)
本文主要介紹了java讀取配置文件自定義字段(yml、properties),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07