在分配操作员上遇到麻烦

时间:2012-11-22 19:47:02

标签: java android arrays

嗨,我正在安卓机器人中使用AI进行棋盘游戏。

我遇到了一种对我没有意义的情况。

代码:

    for(int y = 0; y < BOARD_SIZE ; y++)
    {
        Log.i(TAG, "before calling virtual mBoard:" + mBoard[y]);
    }

    virtualBoard = mBoard;  // int arrays
    virtualBoard[x] = nextMove(counter);

    for(int j = 0; j < BOARD_SIZE ; j++)
    {
        Log.i(TAG, "before calling AIValue mBoard:" + mBoard[j]);
    }

当我使virtualBoard等于mBoard时,我只是将一个数组分配给另一个数组,但为什么日志不同?怎么可能?

2 个答案:

答案 0 :(得分:5)

  

当我使virtualBoard等于mBoard时,我只是将一个数组分配给另一个数组

不,您将mBoard的值指定给virtualBoard。这些变量的值不是数组 - 它们是引用。因此,在该赋值之后,mBoardvirtualBoard的值是对同一数组的引用。然后,您可以在后续语句中更改该数组的内容。

有点像这种情况:

  • 我的家庭住址上有一张纸
  • 我拿一张那张纸,然后交给弗雷德
  • 弗雷德去了那张纸上的地址,把前门涂成绿色。
  • 当我回到家时,我发现我的前门是绿色的。

答案 1 :(得分:1)

    virtualBoard = mBoard;  // int arrays
    virtualBoard[x] = nextMove(counter);

在第一个作业中,您没有创建阵列的副本。而是对数组的引用的副本。

因此,您的virtualBoard引用了与mBoard相同的数组。因此,您使用任何arrayreference所做的任何更改都会反映在另一个reference上。