我对 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
的引用相同?
最佳答案
如果将对象存储在变量或参数中,则始终存储引用。该对象永远不会被复制。仅复制原始类型,例如 int
或 boolean
。
如果您想创建对象的副本,您应该使用 java.lang.Cloneable
接口(interface)和 Clone
方法或复制构造函数来研究对象克隆。您的选择只是一个偏好问题。我通常更喜欢复制构造函数,因为它们更清楚地显示正在发生的事情。至少对我来说是这样。
此外,您的行 return new Object(o.getInnerObject());
将无法编译。但我猜你想在这里写 OuterObject
而不是 Object
。
关于java - 通过作为方法参数传递对象的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354084/