java - 通过作为方法参数传递对象的副本

标签 java oop pass-by-reference pass-by-value objectinstantiation

我对 Java 在方法参数中按引用/值传递的方式有点困惑。

我在 OuterObject 类中有一个构造函数:

private InnerObject io;
public OuterObject(InnerObject io){ 
    this.io = io;
}

public InnerObject getInnerObject(){
    return this.io;
}

如果我将 OuterObject 传递到复制方法中,如下所示:

InnerObject io = new InnerObject();
OuterObject o = new OuterObject(io);    
anotherClass.getCopyOf(o);

在另一个类中:

public static OuterObject getCopyOf(InnerObject o){
    return new OuterObject(o.getInnerObject());
}

如您所见,我使用 InnerObject 作为参数创建了 OuterObject。现在我想知道:

我从 return 语句中得到两个新对象吗? 或者它只是一个新的 OuterObject 副本,但对现有 InnerObject 的引用相同?

最佳答案

如果将对象存储在变量或参数中,则始终存储引用。该对象永远不会被复制。仅复制原始类型,例如 intboolean

如果您想创建对象的副本,您应该使用 java.lang.Cloneable 接口(interface)和 Clone 方法或复制构造函数来研究对象克隆。您的选择只是一个偏好问题。我通常更喜欢复制构造函数,因为它们更清楚地显示正在发生的事情。至少对我来说是这样。

此外,您的行 return new Object(o.getInnerObject()); 将无法编译。但我猜你想在这里写 OuterObject 而不是 Object

关于java - 通过作为方法参数传递对象的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354084/

相关文章:

java - Mustache.java 传递 json 字符串

c++ - 在转换中使用仿函数(带/不带构造函数)

java - 为什么一个已实现的接口(interface)方法被声明为公共(public)的?

java - 将函数作为对 Java 中另一个方法的引用传递

PHP 架构以及按引用传递与按值传递

java - 无法将 URL 发送到 Chrome

java - 什么是 NullPointerException,我该如何解决?

java - java 通用类类型

c++ - cv::Mat 类是否存在设计缺陷?

c# - Unity - Vector3 结构 - 通过引用传递值类型