You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:42:34