我需要在Java方法中传递一个byte [],在方法内部我需要“更改”byte [],但我不想更改本地byte [],我想更改例如,将byte []传递给方法,就像指针一样。
byte[] arr = new byte[10];
doSomethingWithByteArr(arr);
// And now, arr would have changed...
答案 0 :(得分:1)
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);
}
}
答案 1 :(得分:0)
在Java中,只有原始类型在传递给函数时被复制。伪代码应该按预期工作。
虽然在Java中一切都是通过复制传递的,但非原始类型实际上是引用,这就是你的byte []引用函数内外的同一个实例的原因。
答案 2 :(得分:0)
不确定我是否理解你的困境。
Java每次都按值传递参数。这意味着如果它是一个原语,它传递它的值,如果它是一个对象或数组,它传递它引用的对象的值。
因此,如果你传递一个数组,你可以修改它,因为它的别名它将反映在方法之外的数组上。但是您无法将arr变量指向方法代码中的新引用,如果要更改它,可以返回一个新的byte []并分配给它。
据我所知,Java不支持通过引用传递参数。