1

そこで、UIL 模擬試験を行っていたところ、この問題が発生しました。

public void fun(int[] list){
list[2]++;
list[1] = list[0];
list = new int[4];
list[2]++;
}

//////////////////////////
// client code
int[] vals = {2, 7, 3};
fun(vals);
out.print( Arrays.toString(vals) );

試してみたら[2, 2, 5]でしたが、答えは[2, 2, 4]でした。list[2]++ だけだったので、足すだけかと思ったら、足らなかった。最後のインクリメントが出力に含まれなかったのはなぜですか?

4

3 に答える 3

3
list = new int[4];

最後の行は、別の配列の要素をインクリメントしました。

于 2013-11-14T21:18:55.010 に答える
0

list = new int[4];これにより、ローカル参照listアドレスが変更されました。しかし、vals は古いアドレスを保持していました。そのため、最後のインクリメントが新しい配列に対して行われました。そして vals は、操作が行われた古い配列を保持しました。

于 2013-11-14T21:22:24.837 に答える