在函数中读取和设置byte []

时间:2012-06-13 23:08:47

标签: java

我需要在Java方法中传递一个byte [],在方法内部我需要“更改”byte [],但我不想更改本地byte [],我想更改例如,将byte []传递给方法,就像指针一样。

byte[] arr = new byte[10];
doSomethingWithByteArr(arr);
// And now, arr would have changed...

3 个答案:

答案 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不支持通过引用传递参数。

相关问题