今天碰到一个crash:
java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.isEmpty()' on a null object reference
解读一下就是,list(ArrayList)对象未实例化。但是第一次执行这个方法时,正常,再次执行这个方法时,报错。执行代码如下:
if (!testArrayList.isEmpty()){
...
}
注意:在ArrayList中,testArrayList.isEmpty()等同于testArrayList.size==0;判断null还是得使用 ArrayList==null。
但是testArrayList这个全局变量我已经实例化了,为什么还会如此:
public static List<String> testArrayList = new ArrayList<>();
断点跟踪后发现了问题,我在某一个代码块中执行了clear操作:
testArrayList.clear();
执行了这个操作后,testArrayList==null。这也解释了为什么第一次正常执行,clear后,再次执行时报错。
所以执行语句可以这样改:
if (testArrayList !=null && !testArrayList.isEmpty()){
...
}
也可以该释放语句:
testArrayList.clear();
testArrayList = new ArrayList<>();
又解决一个疑问!