java - 数组赋值操作题

标签 java

如果我有一段这样的代码:

MyClass[] objArray = new MyClass[7];
//assign values to objArray
//do something here
//sometime later
MyClass newObj = new MyClass();
objArray[3] = newObj;

上面的最后一条语句将执行以下操作:

  • newObj 的所有内容复制到 objArray[3] 引用的空间。

问题

  1. 我说得对吗?

  2. 浅拷贝还是深拷贝?

  3. 如果是浅拷贝,如何实现深拷贝?

    objArray[3] = newObj; 
    
  4. 此规则是否适用于其他 Java 容器类型,例如 Queue、List、...?

最佳答案

答案 1 和 2:否。仅复制对对象的引用。 newObjobjArray[3] 之后将引用同一个对象实例。

答案3:想要copy,就得自己实现。您可以实现复制构造函数或 Clonable,或者对于简单的深度复制、序列化和反序列化对象,但这需要它和它包含的所有对象都是 Serializable

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

关于java - 数组赋值操作题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058957/

相关文章:

java - 空指针异常在哪里?

java - 配置错误。连接到数据库时找不到类 [org.apache.derby.jdbc.EmbeddedDriver]

java - 对字段的 Lambda 引用

java - 停止将命令行参数中的通配符扩展到 Java

java - 如何为java创建用户表,如asp.net中的aspnet_regsql?

java - JSON 响应被分成多行的原因可能是什么?

java - HornetQ集群队列和故障节点: are messages lost?

java - 假设变量无法解析为变量?

java - 在 Java 接口(interface)中声明参数子类型,在 Java 实现方法中使用子类型

java - 如何向 PDF 文件添加限制,使其被锁定且无法编辑或复制内容,最好使用 Ghostscript 或 Java?