Java 数组列表中的空指针异常
但是仍然会抛出NullPointerException 当我进行调试时,我发现列表1包含空值。在if条件下,将single&替换为double&& 这个 应该是Java 数组列表中的空指针异常,java,arraylist,Java,Arraylist,但是仍然会抛出NullPointerException 当我进行调试时,我发现列表1包含空值。在if条件下,将single&替换为double&& 这个 应该是 if(list1!=null&!list1.isEmpty()) if(a() && b()) &&是合乎逻辑的,即真&真是真,其他一切都是假的。 而&是按位和。更改iflist1=空&!列表1.I我有空加入iflist1=空&!我是空的 短路如&,如果没有必要,不要评估右侧。例如,如果&&left hand
if(list1!=null&!list1.isEmpty())
if(a() && b())
&&是合乎逻辑的,即真&真是真,其他一切都是假的。
而&是按位和。更改iflist1=空&!列表1.I我有空加入iflist1=空&!我是空的
短路如&,如果没有必要,不要评估右侧。例如,如果&&left hand side为false,则无需计算右侧1。换句话说| | |如果left为真,则无需计算右手侧的值。所以,若列表为空,则该部分的其余部分将不会计算
非shortlike&始终两边求值。因此您将得到NullPointerException 使用&&而不是&
&将中断,请改为使用&
说明:
如果您有:
if(list1!=null && !list1.isEmpty())
if(a() & b())
然后执行a和b,并对最终结果进行评估
但如果你有:
if(list1!=null && !list1.isEmpty())
if(a() & b())
然后,如果a为false,则无法到达b。问题是,如果使用&来检查两个条件,则无论第一个语句是true还是false,都会对这两个语句求值。如果第一个值为false,则对第二个值求值将导致NullPointerException。要克服这个问题,您应该使用&&操作符。仅当第一个表达式为true时,即仅当list1不为null时,它才会计算第二个表达式 因此,if内的正确条件应为
if(a() && b())
正如其他人所回答的,换成&& 问题是由于&和&&之间的差异造成的 例如 如果false退出,则第一个jvm计算A==B
if (A==B && B==C)
第一个JVM计算A==B,如果为false或true,JVM也计算B==C
这是一个称为短路的Java规范
请参阅关于和的所有答案解释得非常清楚 但是,在编辑之后,您仍然会得到NullPointerException,问题是您调用getsomeFiles方法的对象为null 在你的代码中,如果你有
list1=object.getsomeFiles();
↑ //null
确保对象的初始化方式如下:
SomeFileClass object; //here object is null
或在对象创建时初始化
object = new SomeFileClass();
来自Java文档
当应用程序在需要对象的情况下尝试使用null时引发。这些措施包括:
调用空对象的实例方法。
访问或修改空对象的字段。
将null的长度视为数组。
像数组一样访问或修改null的插槽。
将null作为可丢弃的值抛出。
对象实例为空
SomeFileClass object = new SomeFileClass();
编辑仍然NPE后,对象为空。检查在调用getsomeFiles的对象中是否有有效引用。
object = new SomeFileClass();
SomeFileClass object = new SomeFileClass();
ArrayList<String> list1=new ArrayList<String>();
if(Object!=null){
list1=object.getsomeFiles();
if(list1!=null&&!list1.isEmpty()){
// Your code here
}
}