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

Java矩阵两种初始化方式导致结果异常的问题排查

问题根源与解决方案

核心问题

直接赋值引用会让matrix2和原matrix共享同一块内存:

  • CASE1是创建独立新矩阵,matrix2拥有自己的内存空间,修改它不会影响原矩阵;
  • CASE2的直接赋值操作(如matrix2 = matrix)只是让matrix2成为原矩阵的别名,两者指向完全相同的内存区域。后续逻辑中修改matrix2时,原matrix的元素会被同步修改,导致你的if判断读到的是已修改后的值,而非初始状态的原矩阵数据,因此会在matrix[1][2]处错误触发条件。

动态创建独立副本(适配LeetCode场景)

由于LeetCode中矩阵大小不固定,无法硬编码初始化,需要动态遍历原矩阵,逐行逐元素复制生成独立的新矩阵:

C语言实现示例

// 假设已知矩阵行数rows和列数cols
int** matrix2 = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
    matrix2[i] = (int*)malloc(cols * sizeof(int));
    for (int j = 0; j < cols; j++) {
        matrix2[i][j] = matrix[i][j];
    }
}

Java语言实现示例

int rows = matrix.length;
int cols = matrix[0].length;
int[][] matrix2 = new int[rows][cols];
for (int i = 0; i < rows; i++) {
    System.arraycopy(matrix[i], 0, matrix2[i], 0, cols);
}

通过这种方式创建的matrix2与原矩阵完全独立,修改它不会影响原matrix的初始数据,后续的条件判断就能基于原矩阵的原始值正确执行。

内容的提问来源于stack exchange,提问作者Deepak Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:18:25