2

私のコードでは、bye配列(byte [] temp = null;)を関数に渡さなければなりません。この関数には、データが割り当てられ、その中にデータが入力されています。関数から戻った後もnullのままです。どうすればこの問題の解決策を見つけることができますか?私を助けてください。

  byte[] temp = null;
  ret = foo(temp);

  boolean foo(byte[] temp)
  {
      temp = new byte[];
      //fill array
  }
4

2 に答える 2

8

あなたはあなたのコードについてあまり明確ではありませんが、私があなたを正しく理解していれば、次のようなものがあります:

byte[] temp = null;
methodThatAllocatesByteArray(temp);
// temp is still null.

これがあなたの言っていることの正しい理解である場合、問題は temp が何も参照していないことです。その参照を別のメソッドに送信すると、(同じ参照を使用するのではなく) その参照のコピーが作成されるため、その参照を変更すると (パラメーター変数に割り当てて)、ローカル メソッドの参照のみが変更されます。あなたがする必要があるのはbyte[]、次のようなメソッドから new を返すことです:

public byte[] methodThatAllocatesByteArray() {
    // create and populate array.
    return array;
}

次のように呼び出しますbyte[] temp = methodThatAllocatesByteArray()。または、最初に配列を初期化してから、その配列への参照を次のように他のメソッドに渡すことができます。

byte[] temp = new byte[size];
methodThatAllocatesByteArray(temp);

この場合、 のパラメータはmethodThatAllocatesByteArrayと同じ配列を指すため、tempそれに対する変更 (別の配列または null への再割り当てを除く) には、 を介してアクセスできますtemp

于 2012-09-19T13:26:51.697 に答える
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;
  }
于 2012-09-19T13:26:33.447 に答える