Java中l(wèi)ist集合為空或?yàn)閚ull的區(qū)別說(shuō)明
list集合為空或?yàn)閚ull的區(qū)別
javaWeb項(xiàng)目,調(diào)用第三方系統(tǒng)獲取第三方數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí) list 集合沒(méi)有數(shù)據(jù)時(shí) 后臺(tái)報(bào)空指針
發(fā)現(xiàn)原因
后臺(tái)查詢數(shù)據(jù)庫(kù)總記錄數(shù)為0(數(shù)據(jù)庫(kù)確實(shí)無(wú)數(shù)據(jù))時(shí),我直接設(shè)置查詢對(duì)象集合list置為null, 然后返給頁(yè)面了,
解決方法
后臺(tái)查詢數(shù)據(jù)庫(kù)總記錄數(shù)為0(數(shù)據(jù)庫(kù)確實(shí)無(wú)數(shù)據(jù))時(shí),將list 重新new一個(gè),再返給頁(yè)面,
這樣就后臺(tái)控制臺(tái)就不會(huì)報(bào)空指針啦
if(list!=null && !list.isEmpty()){
//這個(gè)里面取list中的值
}else{
//做其他處理 }
這樣判斷我發(fā)現(xiàn)當(dāng)集合為null的時(shí)候 , 雖然重新new啦一個(gè)集合 , 但是后臺(tái)還是會(huì)報(bào)空指針
之后我這樣判斷就好啦
if(list!=null && list.size()!=0{
//這個(gè)里面取list中的值
}else{
//做其他處理 }
出現(xiàn)這個(gè)問(wèn)題,是因?yàn)槲覍?duì)Java List集合是否為空還是為null的理解不夠深刻。
我記錄如下要點(diǎn)
1.判斷一個(gè)list集合是否為空
在Java中,list集合為空(集合中無(wú)元素),還是為null,這是兩碼事。
舉例,我有一個(gè)空著的水杯(list),而你沒(méi)有,那你是null,我的size為0。你想裝水就需要自己去買個(gè)水杯(new ArrayList();),但是我就可以直接裝水(list.add(水))。你要是沒(méi)有杯子直接倒水,水就流出去啦(空指針異常)。
2.那么,我們什么時(shí)候用null,什么時(shí)候用isEmpty()或list.size()呢?
isEmpty() 或者(list.size() == 0)用于判斷List內(nèi)容是否為空,即集合中一個(gè)元素也沒(méi)有, 但是使用isEmpty()和size()的前提是,list是一個(gè)空集合,而不是null,所以為了避免異常,建議在使用或賦值list集合之前,做一次空集合創(chuàng)建處理,進(jìn)行內(nèi)存空間分配,即:List list = new ArrayList();
3.list.isEmpty()和list.size()==0 沒(méi)有區(qū)別
isEmpty()判斷有沒(méi)有元素,而size()返回有幾個(gè)元素,如果判斷一個(gè)集合有無(wú)元素,建議用isEmpty()方法,看起來(lái)清晰明了。
4.list等于null,可理解為沒(méi)有對(duì)list集合分配內(nèi)存空間,實(shí)際上壓根就不存在。
所以一般的判斷是
if(list!=null && !list.isEmpty()){
//這個(gè)里面取list中的值
}else{
//做其他處理
}
判斷List集合為空或null
判斷List集合是否為空
Java中,判斷List集合是否為空與是否為null并不相同
新建List對(duì)象,默認(rèn)是為空,即沒(méi)有數(shù)據(jù),而不是null
如:
List<User> list = new ArrayList<User>();
list1.size()==0和isEmpty()判斷的是list1內(nèi)的內(nèi)容為空,而不是一個(gè)空集合,null List list2 = null; 這樣聲明的list2為null
測(cè)試下list是否為空
List<User> list1 = new ArrayList<User>();
if (list1 != null) {
System.out.println(list1.size() + "1");
}
if (list1.size() > 0) {
System.out.println("2");
}
if (null == list1) {
System.out.println("3");
}
if (list1.size() == 0) {
System.out.println("4");
}
if (list1 != null && list1.size() == 0) {
System.out.println("test list==0");
}
if (list1 != null && list1.size() > 0) {
System.out.println("test list>0");
}
List<User> list2 = null;
System.out.println(list2 + "==>list2=null");
輸出得到:
01
4
test list==0
null==>list2=null
可以得到list1.size()為0,可以理解為對(duì)list集合分配內(nèi)存空間,但數(shù)據(jù)為空
而list2為null,系統(tǒng)并沒(méi)有weiqi為其分配空間
網(wǎng)上有個(gè)例子,list1可以比喻成空的水杯,沒(méi)有水,所以size為0
而list2則沒(méi)有水杯,空指針異常
List集合判斷2個(gè)條件
if(null == list || list.size() ==0 ){
}
1.判斷null == list ,判斷是否有這個(gè)容器水杯
2.list.size() == 0,判斷容器水杯內(nèi)是否有水
3.list.size()和list.isEmpty()判斷含義一致
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基于HttpClient實(shí)現(xiàn)RPC的示例
HttpClient可以實(shí)現(xiàn)使用Java代碼完成標(biāo)準(zhǔn)HTTP請(qǐng)求及響應(yīng)。本文主要介紹了Java基于HttpClient實(shí)現(xiàn)RPC,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Java字符串格式化,{}占位符根據(jù)名字替換實(shí)例
這篇文章主要介紹了Java字符串格式化,{}占位符根據(jù)名字替換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
MyBatis-Plus聯(lián)表查詢以及分頁(yè)代碼實(shí)例
在開(kāi)發(fā)中遇到了一個(gè)問(wèn)題,需要進(jìn)行聯(lián)表查詢并進(jìn)行分頁(yè),因?yàn)椴幌胱约簛?lái)寫(xiě)分頁(yè),所以還是依靠MybatisPlus來(lái)實(shí)現(xiàn)想要的功能,下面這篇文章主要給大家介紹了關(guān)于MyBatis-Plus聯(lián)表查詢以及分頁(yè)的相關(guān)資料,需要的朋友可以參考下2023-06-06
Java驗(yàn)證日期時(shí)間字符串是否合法的三種方式
判斷日期經(jīng)常合法出現(xiàn)在IO場(chǎng)景下,下面將盡量使用簡(jiǎn)練的思路和代碼呈現(xiàn)給大伙,這篇文章主要給大家介紹了關(guān)于Java驗(yàn)證日期時(shí)間字符串是否合法的三種方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
將下載好的jar包導(dǎo)入到本地maven倉(cāng)庫(kù)中操作
這篇文章主要介紹了將下載好的jar包導(dǎo)入到本地maven倉(cāng)庫(kù)中操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
詳解SpringBoot中@NotNull,@NotBlank注解使用
這篇文章主要為大家詳細(xì)介紹了Spring?Boot中集成Validation與@NotNull,@NotBlank等注解的簡(jiǎn)單使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-08-08
Flask實(shí)現(xiàn)異步非阻塞請(qǐng)求功能實(shí)例解析
這篇文章主要介紹了Flask實(shí)現(xiàn)異步非阻塞請(qǐng)求功能實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
Java 實(shí)戰(zhàn)項(xiàng)目錘煉之網(wǎng)上花店商城的實(shí)現(xiàn)流程
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+servlet+mysql+ajax實(shí)現(xiàn)一個(gè)網(wǎng)上花店商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11

