關於判空的細節

先提供一個判斷表達式以下:spa

ips爲一個List類型。對象

if(ips != null && ips.size() == 0){ip

  System.out.println("我會被輸出嗎?");List

}new

不知道你們第一感受是什麼,會不會以爲是否是判斷邏輯有點問題呢?運算符

一、當List<String> ips = null時:ps

ips != null爲假這個條件就已經決定告終果,由於&&爲斷路運算符,後面的判斷條件不會繼續執行,因此結果不會輸出。實例

二、當List<String> ips2 = Arrays.asList("","")時:

ips != null爲真,繼續執行後面的判斷條件,ips.size()爲2也不等於0,因此判斷條件仍是爲假,結果也不會輸出。

是判斷邏輯有問題嗎?

固然不是,來看下面的狀況:

三、當List<String> ips3 = new ArrayList<>()時:

初始化一個實例,可是裏面爲空值。

ips != null爲真,由於有實例對象了,可是ips.size()爲0,因此後面的條件也同時知足,控制檯輸出"我會被輸出嗎?"

小提示:ips3.isEmpty()此時也爲真,若判斷條件改成if(ips3.isEmpty() && ips3.size() == 0){},結果也會輸出;

相關文章
相關標籤/搜索