Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组列表中的空指针异常_Java_Arraylist - Fatal编程技术网

Java 数组列表中的空指针异常

Java 数组列表中的空指针异常,java,arraylist,Java,Arraylist,但是仍然会抛出NullPointerException 当我进行调试时,我发现列表1包含空值。在if条件下,将single&替换为double&& 这个 应该是 if(list1!=null&!list1.isEmpty()) if(a() && b()) &&是合乎逻辑的,即真&真是真,其他一切都是假的。 而&是按位和。更改iflist1=空&!列表1.I我有空加入iflist1=空&!我是空的 短路如&,如果没有必要,不要评估右侧。例如,如果&&left hand

但是仍然会抛出NullPointerException

当我进行调试时,我发现列表1包含空值。

在if条件下,将single&替换为double&&

这个

应该是

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
    }
}