Java中调用二维数组单个对象方法却作用于整个数组的问题
问题原因与解决方案
问题出在数组初始化的方式上:
- 你使用
Arrays.fill(row, new Field())时,new Field()仅执行一次,生成单个Field对象实例,Arrays.fill只是把这个对象的引用复制给当前行的所有元素。所以整行的每个数组元素都指向同一个对象,调用其中任意一个的openField()方法,本质上都是在操作同一个实例,看起来就像方法作用于整个数组。
正确的初始化方式
要让每个数组元素都是独立的Field实例,需要为每个位置单独创建对象,不要用Arrays.fill批量填充同一个引用:
Field[][] board = new Field[8][8]; // 双重循环逐个创建实例 for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[i].length; j++) { board[i][j] = new Field(); } }
或者用增强for循环实现:
Field[][] board = new Field[8][8]; for (Field[] row : board) { for (int j = 0; j < row.length; j++) { row[j] = new Field(); } }
这样每个board[i][j]都是独立的Field对象,调用board[0][1].openField()就只会修改该位置的对象状态,不会影响其他数组元素。
内容的提问来源于stack exchange,提问作者A.I.noa
相关产品推荐
相关产品推荐

