java为什么在循环中的数组中分配引用后会出现NullPointerException?
这不起作用的原因:
//...
Integer[] array=new Integer[5];
for(Integer x: array){x=-1;}
printArray(array);
//...
// the print function is the following
public static String printArray(Object[] array){
String str="";
for(Object obj : array){
str+=obj.toString()+" ,";
}
System.out.println(str);
}
我在printArray函数的for each语句中得到了NullPointerException,为什么
# 1 楼答案
因为您从未使用任何值初始化数组,所以它只包含一堆
null
。在调用.toString()
之前,需要为它指定值例如:
您的初始循环(
x = -1
)不是更改数组,而是更改循环中的临时对象x
。这类似于执行以下操作:相反,如果要使用循环进行初始化,请执行以下操作:
# 2 楼答案
for(Integer x: array){x=-1;}
不会初始化数组,它只是将临时变量x设置为-1五次# 3 楼答案
赋值是对局部变量x进行的,它不会自动传播到数组变量。 试试这个:
# 4 楼答案
既然你问。。。。我会的
printString
打印字符串或printArray
打印数组或返回字符串,因为您可能会忽略结果,就像您在示例中所做的那样。如果它返回字符串,则调用它toString()或assString()李>但是,如果您想编写自己的printArray
# 5 楼答案
当您执行x=-1时,您将为变量x分配一个新实例,而不改变数组中对象的值。因此,数组实际上是未初始化的
# 6 楼答案
上面的代码不会更新数组。如果要更新它,需要为数组元素赋值,如下所示
第一个代码段没有做任何有用的事情的原因是Java只是按值传递。当您创建一个局部变量
x
并将一个数组元素作为其值赋给它时(就像您在代码中所做的那样),它将包含对值的引用(整数对象),但不包含对它在数组中的位置的引用。更改x
的值时,只需使x
指向另一个对象即可