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

Java使用嵌套for循环遍历二维数组索引并实现深拷贝返回副本

核心问题说明

你当前getMatrixVals方法存在核心错误:int [][] mCopy = matrixVals;只是将私有字段的引用直接赋值给局部变量,二者仍指向堆内存中的同一个数组对象,外部修改返回的数组仍会篡改类的私有属性,不符合封装安全要求。

修复方案

嵌套遍历二维数组逻辑说明

二维数组本质是「数组的数组」,外层循环遍历行索引,内层循环遍历当前行的列索引,即可覆盖所有元素的索引位置。拷贝时需要先创建独立的新数组对象,再逐元素赋值,才能避免引用共享。

修正后的getter方法

//getter方法
public int [][] getMatrixVals()
{
    // 获取原数组的行数
    int rows = matrixVals.length;
    // 初始化独立的新二维数组对象,而非直接赋值引用
    int [][] mCopy = new int[rows][];

    // 外层循环:遍历每一行
    for(int i = 0; i < rows; i++)
    {
        // 获取当前行的列数,兼容不规则二维数组(每行长度不同的场景)
        int cols = matrixVals[i].length;
        // 初始化当前行的数组
        mCopy[i] = new int[cols];
        // 内层循环:遍历当前行的每一列
        for(int j = 0; j < cols; j++)
        {
            // 逐元素拷贝,保证两个数组完全独立
            mCopy[i][j] = matrixVals[i][j];
        }
    }
    // 返回独立的拷贝数组
    return mCopy;
}

补充优化建议

你现有setMatrixVals方法中int cols = mVals[0].length;的写法仅支持所有行长度相同的规则二维数组,如果需要兼容不规则二维数组,可参照getter的写法逐行获取列数,避免传入非规则数组时出现索引越界异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:36:05