【发布时间】:2013-11-02 00:54:41
【问题描述】:
boolean[][] grid = {{false,false},
{false,false}};
WorldState test1 = new WorldState(grid,0,0);
System.out.println(Arrays.deepToString(grid));
为什么我在 WorldState 中使用 in 后网格的布尔值会发生变化。它不应该保持错误,因为我没有为网格分配任何东西。 I 系统打印出网格,它是[[true, false], [false, false]]。我不明白真实来自哪里。请告诉我为什么它会变为 true。谢谢你。世界状态代码如下:
public class WorldState
{
boolean[][]grid2;
public WorldState(boolean[][] grid, int row, int col)
{
this.grid2=grid;
this.grid2[row][col] = true;
}
}
【问题讨论】:
-
数组和对象是通过引用而不是值来复制的。通过将一个数组分配给另一个数组,您并没有复制该数组,您只是告诉 Java 它们是相同的引用。你需要复制它。
-
在Java Visualize运行你的代码,问题会更明显
-
另见
Arrays.copyOf(boolean[], int)复制数组docs.oracle.com/javase/7/docs/api/java/util/Arrays.html