我将函数 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 变量?
我正在努力寻找原因,但仍然不知道:/ 谢谢你的帮助
答案 0 :(得分:3)
乍一看这可能令人困惑,但是当你理解通过引用传递和传递值时,它很容易理解。
数组变量包含对实际数组的引用。基本上它们被视为与对象相同。这意味着您要更新为函数提供的地图。
int
个变量是原始类型(int
,short
,byte
,long
,char
,float
,{ {1}}当然double
- 注意名称中的初始小写字符),它们在Java中通过值传递。基本上是价值的副本。所以你永远不能使用这样的变量来返回任何值。如果你想这样做,你需要boolean
声明。
例如:
return