本地变量在java中全局更新

时间:2014-11-22 13:15:01

标签: java variables

我将函数 move 称为2维数组,其中零点 [6,5] ,其值为 0 < / strong>即可。该函数将值增加到 1

然后同一个函数再次调用 move(x - 1,y,map,i) ,这意味着它位于 [5,5] ] ,值 0 ,它会增加到 1 并自行结束。

但为什么 map 变量也会在函数中更新,该函数首先被调用?

private static byte[10][10] myMap = {*all zeros*};

public static void main(String[] args) {
    move(6, 5, myMap, 0);
}

private static void move(int x, int y, byte[][] map, int i) {
    if (map[x][y] == 0) {
        map[x][y]++;
        i++;
    }
    if (i > 1) return;

    System.out.print(x + " " + y);
    // 6 5
    System.out.print(map[5][5] + " " + i);
    // 0 1
    move(x - 1, y, map, i);

    System.out.print(map[5][5] + " " + i);
    // 1 1 ... WTH? Shouldn't this return 0 1 like above?
}

当它更新 地图 时,为什么它不更新 i 变量?

我正在努力寻找原因,但仍然不知道:/ 谢谢你的帮助

1 个答案:

答案 0 :(得分:3)

乍一看这可能令人困惑,但是当你理解通过引用传递和传递值时,它很容易理解。

数组变量包含对实际数组的引用。基本上它们被视为与对象相同。这意味着您要更新为函数提供的地图。

int个变量是原始类型(intshortbytelongcharfloat,{ {1}}当然double - 注意名称中的初始小写字符),它们在Java中通过值传递。基本上是价值的副本。所以你永远不能使用这样的变量来返回任何值。如果你想这样做,你需要boolean声明。


例如:

return