以前判断list集合是否为空,会用list.isEmpty()判断是否为true,为true则业务继续进行下去,但以下这个方法报了null,为什么呢?
业务场景模拟:
创建一个父类,在父类里定义一个子类的list,main方法里存储父类id,但定义的list不给他赋值,之后再用father.getSonList()会报空异常。但用CollectionUtils的判断则不会报错。
代码如下:
原因:
从源码可以知道,ColletionsUtils里面也判断了isEmpty,但为什么他没报错呢?
我们都知道&&和||都是短路模式,&&必须两个都为正确(true),才会返回正确,只要第一个为false,则下面的不执行,直接返回错误。而||则是只要第一个返回true,则后面的就不再执行。
所以原因找到了:他是在先判断isEmpty之前判断的是否为null,并且用的短路模式,||当前面的为正确(true),则后面的isEmpty则不会运行,直接返回正确,从而业务能正常运行下去,不会报空异常。