栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Java中克隆多维数组?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Java中克隆多维数组?

运行上面的代码时,与我的意图相反,arrayMaster以及arrayChanges都发生了变化。

线

static private int[][] arrayChanges = arrayMaster;

是罪魁祸首。该行指向

arrayChanges
arrayMaster
指向同一对象,因此当您从任一对象访问该对象时,都可以看到对任一对象的更改。

编辑:每当您克隆多维数组的一个维度时会发生什么

正如Eric
Lippert解释的那样
,数组在概念上是变量列表。如果仅分配另一个变量以指向la相同的数组

staticprivate int[][] arrayChanges =arrayMaster;
,则根本不会更改变量集。除了之外
arrayChanges
,您没有创建任何新变量,因此您没有从操作系统/
JVM中获得更多的内存,因此您所做的任何更改都将
arrayMaster
应用于该变量,
arrayChanges
反之亦然。

现在让我们看一个二维数组。在Java中,二维数组是一列变量的列表,这些变量恰好具有这些变量中的每个变量都指向一维数组的属性。因此,每当克隆一个二维数组时,都会创建一个新的变量列表,每个变量都指向旧变量所指向的相同位置。因此,您获得了一些

arrayChanges[0]= newint[10]
好处
arrayMaster
,可以安全地编写而不影响,但是一旦开始引用,
arrayChanges[i][j]
您仍在引用与该引用相同的第二级数组
arrayMaster
。要深度复制一个int的二维数组,您真正想要的是

public static int[][] deepCopyIntMatrix(int[][] input) {    if (input == null)        return null;    int[][] result = new int[input.length][];    for (int r = 0; r < input.length; r++) {        result[r] = input[r].clone();    }    return result;}

对于那些将来可能会看这个答案的人:是的,最好

int
T
这里代替并使该方法通用,但是为此目的,更具体的深度复制方法更易于解释。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485990.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号