Java数组 - 来自测试

Osh*_*rib 3 java

在我的Java测试中是下一个问题:

有下一个方法:

public void changer(int[] x, int y) {

    x[y] = x[y] +3;
    y = y * 2;
}
Run Code Online (Sandbox Code Playgroud)

我们有数组命名a,值为:

2,4,0,1,-6,3,8,7,5
Run Code Online (Sandbox Code Playgroud)

如果b = 3

下次通话后将是a和b的值:

changer(a,b);
Run Code Online (Sandbox Code Playgroud)

我的回答是:b = 6

a = 2,4,0,4,-6,3,8,7,5
Run Code Online (Sandbox Code Playgroud)

我在BlueJ上测试了它并得到了相同的答案,但是测试者写道:错了!

你说什么?

Sim*_*nni 7

你对数组值是正确的,但关于b值是错误的.

当您调用方法时,java会按值传递所有内容,这意味着更改y仅在本地更改值,并且更改不会反映在b上.

但是,在传递数组和对象时,会传递表示指向数组的指针的值.这意味着x = new int[8]根本不会改变a,因为当y发生变化时,不会反映到a.但是,更改数组成员或对象属性按预期工作,导致a和x都指向内存中的同一个数组.