首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组深拷贝和浅拷贝

数组深拷贝和浅拷贝
EN

Stack Overflow用户
提问于 2014-03-06 07:03:21
回答 2查看 927关注 0票数 0

我在学习深奥和浅薄的抄袭。

如果我们有两个数组:

代码语言:javascript
运行
复制
int[]arr1={1,2,3,4,5};
int[]arr2={1,2,3,4,5};

问:两个数组指向相同的引用( [1][2][3][4][5] )。

如果我改变arr1[2]会发生什么?它会改变arr2[2]吗?

当我们将数组(随机数组,不一定是arr1arr2)从main传递到方法时,编译器会将数组的复制到该方法,对吗?

,如果编译器被重写以创建和发送数组数据的副本到该方法。主要是原始数组发生了什么?我认为原始数组可能会根据方法改变,并返回到主数组中。我不确定。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-06 07:11:45

问:两个数组指向相同的引用135。

不完全同意。数组具有相同的内容。也就是说,根据您的初始化,它们所使用的数据是不共享的。但是,像这样初始化它:

代码语言:javascript
运行
复制
int[]arr1={1,2,3,4,5};
int[] arr2 = arr1

如果我改变了第12条,会发生什么?它会改变arr22吗?

根据对上述问题的回答,不会。但是,如果您要按照我指出的方法更改您的初始化机制,它就会改变。

当我们将数组(随机数组,不一定是arr1或arr2)从main传递到方法时,编译器会将数组的浅表复制到该方法,对吗?

您的方法将收到一个查找数组的位置,不会进行复制。

如果Java编译器被重写,以便将数组数据的深层副本生成并发送给该方法。主要是原始数组发生了什么?我认为原始数组可能会根据方法改变,并返回到主数组中。我不确定。

如果要创建数组的深层副本并将其发送到您的方法,并且您的方法将在该副本上工作,那么原始数组应该保持不变。

票数 3
EN

Stack Overflow用户

发布于 2014-03-06 07:08:48

因为您有基本类型,所以可以创建独立的数组。为了演示深而浅的副本:

代码语言:javascript
运行
复制
MyObject a = new MyObject("a");
MyObject[] first = new MyObject[] {a};
MyObject[] second = new MyObject[] {a};
a.setName("b");
System.out.println(second[0].getName());
second[0].setName("c");
System.out.println(first[0].getName());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22217432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档