Javaメソッドでbyte[]を渡す必要があり、メソッド内でbyte []を「変更」する必要がありますが、ローカルbyte []を変更したくないので、渡されたbyte[を変更したい]たとえば、ポインタのようにメソッドに。
byte[] arr = new byte[10];
doSomethingWithByteArr(arr);
// And now, arr would have changed...
Javaメソッドでbyte[]を渡す必要があり、メソッド内でbyte []を「変更」する必要がありますが、ローカルbyte []を変更したくないので、渡されたbyte[を変更したい]たとえば、ポインタのようにメソッドに。
byte[] arr = new byte[10];
doSomethingWithByteArr(arr);
// And now, arr would have changed...
Java は、非プリミティブ引数をメソッドに渡すときは参照値渡しであり、プリミティブを渡すときは値渡しです。つまり、バイト配列があり、それを変更メソッドに渡すと、そのオブジェクトは変更されました。
例:
public static void main(String[] args) {
byte[] arr = new byte[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
// arr now contains { 0, 1, 2, 3, ... 9 }
System.out.println(Arrays.toString(arr));
randomize(arr);
// arr now contains (ex.) { 6, 3, 7, 1, 9, 3, 2, 6, 3, 0 }
System.out.println(Arrays.toString(arr));
}
public void randomize(byte[] arr) {
Random random = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(10);
}
}
Java では、関数に渡されるときにプリミティブ型のみがコピーされます。その疑似コードは期待どおりに機能するはずです。
Java ではすべてがコピーによって渡されますが、非プリミティブ型は実際には参照であるため、byte[] は関数の内外で同じインスタンスを参照します。
あなたのジレンマを理解しているかどうかわかりません。
Java は毎回パラメータを値で渡します。これは、プリミティブの場合はその値を渡し、オブジェクトまたは配列の場合はそれによって参照されるオブジェクトの値を渡すことを意味します。
したがって、配列を渡すと、それを変更できます。これはエイリアスであるため、メソッドの外側の配列に反映されます。ただし、メソッド コード内から arr 変数を新しい参照にポイントすることはできません。変更したい場合は、新しい byte[] を返してそれに割り当てることができます。
私の知る限り、Java は参照によるパラメーターの受け渡しをサポートしていません。