在我的代码中,我必须将一个再见数组(byte [] temp = null;)传递给a 在其中分配和填充数据的函数。后 从函数返回它仍然是null。我怎么能找到一个 解决这个问题。???请帮帮我。
byte[] temp = null;
ret = foo(temp);
boolean foo(byte[] temp)
{
temp = new byte[];
//fill array
}
答案 0 :(得分:7)
您对代码的了解并不是很清楚,但如果我理解正确,您可能会遇到以下情况:
byte[] temp = null;
methodThatAllocatesByteArray(temp);
// temp is still null.
如果这是对你所说的正确理解,那么问题就是temp是对任何事物的引用。将该引用发送到另一个方法会生成该引用的副本(而不是使用相同的引用),因此,更改该引用(分配给参数变量)只会更改本地方法的引用。您需要做的是从方法中返回一个新的byte[]
:
public byte[] methodThatAllocatesByteArray() {
// create and populate array.
return array;
}
并将其称为:byte[] temp = methodThatAllocatesByteArray()
。或者您可以先初始化数组,然后将对该数组的引用传递给另一个方法,如下所示:
byte[] temp = new byte[size];
methodThatAllocatesByteArray(temp);
因为在这种情况下methodThatAllocatesByteArray
中的参数将指向与temp
相同的数组,所以对它的任何更改(除了将其重新分配给不同的数组或null)都可以通过{ {1}}。
答案 1 :(得分:4)
你需要使用它:
byte[] temp = new byte[some_const];
ret = foo(temp);
boolean foo(byte[] temp)
{
//fill array
}
或
byte[] temp = null;
temp = foo(temp);
byte[] foo(byte[] temp)
{ temp = new byte[some_const];
//fill array
return temp;
}