先提供一個判斷表達式以下: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){},結果也會輸出;