数组用户定义的文件读取函数导致NullPointerException Java
我必须从文本文件读取一些信息到不同的字符串数组。所以,我为这个任务写了一个方法。代码如下:
private String[] stateNames;
.
.
.
readHelper(stateNames);
.
.
.
private void readHelper( String[] str ) // str is stateNames
{
try
{
strLine = bufferReader.readLine();
String[] tokens = strLine.split(",");
str = new String[ tokens.length ];
copyStr2Str(tokens, str);
insertionSort( str ); // Everything is fine, str contains the data
}
catch (IOException ex)
{
Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
}
} // End of readHelper()
但是,在执行readHelper()
之后,stateNames变为null
。我想,我导致了一些指针错误
# 1 楼答案
您应该将数组作为方法的返回值返回
# 2 楼答案
在Java中,参数作为引用的副本传递
当你这样做的时候
您放弃方法调用传递的引用,并创建一个新的引用(该引用仅在创建它的
try
范围结束之前有效)。原始stateNames
一直指向原始值,即null
修改该方法以返回
str
数组并将其分配给stateNames
更新以回答评论:
要理解这一点,请尝试以下代码
由于将新对象指定给列表1,原始引用将丢失,因此原始对象不会受到影响(但对于列表2,您仍在使用原始对象)。由于在代码中创建了一个新的
String[]
,因此不再使用原始代码