第一次接觸公司項目的時候看到一段代碼 ,感覺會有問題
if (list == null || list.isEmpty()) { list = productBrandMapper.findList(2); redisUtils.setex(key, list, 60 * 30); }
如果 list爲null值,那麼list.isEmpty()時會報java.lang.NullPointerException空指針異常,
但是運行了幾次都是沒有問題的,之前只知道&&有短路效果,百度之後發現,||和&&運算符都是具有短路效果
舉個例子,
a=1 b=2 所以 a>0 這個值爲true b>1 這個值爲true b>2 這個值爲 false
如 if(a>0&b>1) 我們可以得出 if(true&true),條件成立(true不爲0,所以true&true不爲0)
如 if(a>0&&b>1) 我們可以得出 if(true&&true),條件成立(&&兩邊操作數都非零,所以條件成立)
如 if(b>2&a>0) 我們可以得出 if(false&true),條件不成立(false爲0,false&true爲0,條件不成立)
如 if(b>2&&a>0) 我們可以得出 if(false&&a>0),條件不成立(&&左側爲false,&&運算到此結束,條件不成立)
如果是||和|會有不一樣的效果
還有一點重要的,i=1在C語言中是有返回值的,而在Java中是沒有的,在if判斷中出現賦值操作是會報錯的