如果我有一段这样的代码:
MyClass[] objArray = new MyClass[7];
//assign values to objArray
//do something here
//sometime later
MyClass newObj = new MyClass();
objArray[3] = newObj;
上面的最后一条语句将执行以下操作:
- 将
newObj
的所有内容复制到 objArray[3] 引用的空间。
问题
我说得对吗?
浅拷贝还是深拷贝?
如果是浅拷贝,如何实现深拷贝?
objArray[3] = newObj;
此规则是否适用于其他 Java 容器类型,例如 Queue、List、...?
最佳答案
答案 1 和 2:否。仅复制对对象的引用。 newObj
和 objArray[3]
之后将引用同一个对象实例。
答案3:想要copy,就得自己实现。您可以实现复制构造函数或 Clonable
,或者对于简单的深度复制、序列化和反序列化对象,但这需要它和它包含的所有对象都是 Serializable
答案 4:所有 Java 对象都完全相同:驻留在堆上,并且代码仅使用对对象的引用。容器类型通常实现一个执行浅拷贝的拷贝构造函数。没有自动适用于所有类的深层复制功能。
关于java - 数组赋值操作题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058957/