Java中l(wèi)ist集合為空或為null的區(qū)別說明
list集合為空或為null的區(qū)別
javaWeb項目,調(diào)用第三方系統(tǒng)獲取第三方數(shù)據(jù)庫數(shù)據(jù)時 list 集合沒有數(shù)據(jù)時 后臺報空指針
發(fā)現(xiàn)原因
后臺查詢數(shù)據(jù)庫總記錄數(shù)為0(數(shù)據(jù)庫確實無數(shù)據(jù))時,我直接設(shè)置查詢對象集合list置為null, 然后返給頁面了,
解決方法
后臺查詢數(shù)據(jù)庫總記錄數(shù)為0(數(shù)據(jù)庫確實無數(shù)據(jù))時,將list 重新new一個,再返給頁面,
這樣就后臺控制臺就不會報空指針啦
if(list!=null && !list.isEmpty()){ //這個里面取list中的值 }else{ //做其他處理 }
這樣判斷我發(fā)現(xiàn)當(dāng)集合為null的時候 , 雖然重新new啦一個集合 , 但是后臺還是會報空指針
之后我這樣判斷就好啦
if(list!=null && list.size()!=0{ //這個里面取list中的值 }else{ //做其他處理 }
出現(xiàn)這個問題,是因為我對Java List集合是否為空還是為null的理解不夠深刻。
我記錄如下要點
1.判斷一個list集合是否為空
在Java中,list集合為空(集合中無元素),還是為null,這是兩碼事。
舉例,我有一個空著的水杯(list),而你沒有,那你是null,我的size為0。你想裝水就需要自己去買個水杯(new ArrayList();),但是我就可以直接裝水(list.add(水))。你要是沒有杯子直接倒水,水就流出去啦(空指針異常)。
2.那么,我們什么時候用null,什么時候用isEmpty()或list.size()呢?
isEmpty() 或者(list.size() == 0)用于判斷List內(nèi)容是否為空,即集合中一個元素也沒有, 但是使用isEmpty()和size()的前提是,list是一個空集合,而不是null,所以為了避免異常,建議在使用或賦值list集合之前,做一次空集合創(chuàng)建處理,進行內(nèi)存空間分配,即:List list = new ArrayList();
3.list.isEmpty()和list.size()==0 沒有區(qū)別
isEmpty()判斷有沒有元素,而size()返回有幾個元素,如果判斷一個集合有無元素,建議用isEmpty()方法,看起來清晰明了。
4.list等于null,可理解為沒有對list集合分配內(nèi)存空間,實際上壓根就不存在。
所以一般的判斷是
if(list!=null && !list.isEmpty()){ //這個里面取list中的值 }else{ //做其他處理 }
判斷List集合為空或null
判斷List集合是否為空
Java中,判斷List集合是否為空與是否為null并不相同
新建List對象,默認(rèn)是為空,即沒有數(shù)據(jù),而不是null
如:
List<User> list = new ArrayList<User>();
list1.size()==0和isEmpty()判斷的是list1內(nèi)的內(nèi)容為空,而不是一個空集合,null List list2 = null; 這樣聲明的list2為null
測試下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,可以理解為對list集合分配內(nèi)存空間,但數(shù)據(jù)為空
而list2為null,系統(tǒng)并沒有weiqi為其分配空間
網(wǎng)上有個例子,list1可以比喻成空的水杯,沒有水,所以size為0
而list2則沒有水杯,空指針異常
List集合判斷2個條件
if(null == list || list.size() ==0 ){ }
1.判斷null == list ,判斷是否有這個容器水杯
2.list.size() == 0,判斷容器水杯內(nèi)是否有水
3.list.size()和list.isEmpty()判斷含義一致
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基于字符流形式讀寫數(shù)據(jù)的兩種實現(xiàn)方法示例
這篇文章主要介紹了Java基于字符流形式讀寫數(shù)據(jù)的兩種實現(xiàn)方法示,結(jié)合實例形式分析了java逐個字符讀寫及使用緩沖區(qū)進行讀寫操作的具體實現(xiàn)技巧,需要的朋友可以參考下2018-01-01java捕獲AOP級別的異常并將其傳遞到Controller層
如何在一個現(xiàn)代的Java應(yīng)用中,捕獲AOP(面向切面編程)級別的異常,并將這些異常傳遞到Controller層進行合適的處理,異常處理在構(gòu)建可靠的應(yīng)用程序中起著關(guān)鍵作用,而AOP則可以幫助我們更好地管理和組織代碼,我們將深入研究如何結(jié)合AOP和異常處理來構(gòu)建健壯的應(yīng)用2023-09-09淺談SpringBoot中properties、yml、yaml的優(yōu)先級
優(yōu)先級低的配置會被先加載,所以優(yōu)先級高的配置會覆蓋優(yōu)先級低的配置,本文就來介紹一下SpringBoot中properties、yml、yaml的優(yōu)先級,感興趣的可以了解一下2023-08-08分析Java中ArrayList與LinkedList列表結(jié)構(gòu)的源碼
這篇文章主要介紹了Java中ArrayList與LinkedList列表結(jié)構(gòu)的源碼,文章最后對LinkedList和ArrayList以及Vector的特性有一個對比總結(jié),需要的朋友可以參考下2016-05-05mybatis-plus mapper中foreach循環(huán)操作代碼詳解(新增或修改)
這篇文章主要介紹了mybatis-plus mapper中foreach循環(huán)操作代碼詳解(新增或修改),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11