第一次接触公司项目的时候看到一段代码 ,感觉会有问题
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判断中出现赋值操作是会报错的