gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:58:20 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com