首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组赋值操作问题

数组赋值操作问题
EN

Stack Overflow用户
提问于 2011-05-19 12:55:48
回答 5查看 1.8K关注 0票数 1

如果我有这样的代码:

代码语言:javascript
运行
复制
MyClass[] objArray = new MyClass[7];
//assign values to objArray
//do something here
//sometime later
MyClass newObj = new MyClass();
objArray[3] = newObj;

最后一项声明如下:

  • newObj的所有内容复制到objArray3引用的空格中。

问题

  1. 是对的吗?
  2. 浅拷贝还是深拷贝?
  3. 如果是浅拷贝,我如何才能使深拷贝成为可能?

objArray3 = newObj;

  • 是否适用于其他

容器类型,如队列、列表、.?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-19 13:08:06

回答1和2:没有。只复制对对象的引用。newObjobjArray[3]随后将引用同一个对象实例。

答3:如果你想要一份副本,你必须自己实现它。您可以实现一个复制构造函数或Clonable,或者对于一个简单的深拷贝,序列化和反序列化对象,但这需要它和它所包含的所有对象都是Serializable

答案4:对于所有Java对象来说,这是完全相同的:驻留在堆上,并且代码只适用于对对象的引用。容器类型通常实现一个执行浅拷贝的复制构造函数。没有可自动用于所有类的深度复制功能。

票数 5
EN

Stack Overflow用户

发布于 2011-05-19 13:00:13

好的,它将把“newObj的所有内容”复制到objArray[3].中,但是 newObj变量的内容(或值)只是对对象的引用。换言之,考虑:

代码语言:javascript
运行
复制
objArray[3] = newObj;
newObj.setFoo("hello");

System.out.println(objArray[3].getFoo()); // prints "hello"

(当然,假设是一个简单的属性)。

基本上,变量(包括数组元素)的值从来不是一个对象。它始终是一个引用或一个原始值。它总是按值传递或复制。

票数 5
EN

Stack Overflow用户

发布于 2011-05-19 13:00:07

  1. 否,它不复制内容。它只是创建了另一个reference.
  2. Shallow.(参见1)
  3. 如果您想要一个深拷贝,就不能使用该语句。您必须在类constructor.
  4. It中重写java.lang.Object的克隆方法,并使用该方法或创建复制MyClass应用于所有非原语的数据类型,如int或double;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6058957

复制
相关文章

相似问题

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