5

我最近搬到了 Java,但我在变量别名方面遇到了一些问题。我到处搜索,但我似乎找不到将一个对象的内容复制到另一个对象的正确方法,而不仅仅是引用同一个对象。有没有人有什么建议?

编辑:如果我遇到别名问题的 int 怎么办?我应该首先避免这种情况吗?如果是这样,怎么做?

4

5 回答 5

11

如果你的类实现了Clonable接口,那么你可以使用Object.clone()方法来创建一个硬拷贝。维基百科条目有一些很好的细节。

另一种方法是使用复制构造函数,根据此页面,它更安全。

于 2009-04-25T19:47:50.137 回答
4

这取决于“内容”。例如,您不能只复制一个 FileInputStream,然后假设两者都将继续从同一个文件加载。

基本上有两种方法: 如果类支持“Cloneable”接口,你可以通过调用clone()来克隆它。如果没有,它通常有一个复制构造函数,从另一个对象复制数据。

通常,您最终会得到一个浅拷贝(即类的所有字段都被复制,但它们指向同一个对象)。

另一方面,许多对象被设计为不可变的(如 String 类),因此无需复制此类对象,因为它无论如何都无法更改。

于 2009-04-25T19:53:47.297 回答
2

另一种选择是设计您的类来创建不可变对象:
http

://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html 这避免了克隆或复制构造函数的需要,因为无法更改对象一旦创建。所以多个变量可以指向同一个对象,但没有一个可以改变对象的状态。

于 2012-11-30T19:42:31.780 回答
1

java.lang.Cloneable 是您正在寻找的。

于 2009-04-25T19:45:11.407 回答
1

您不能对 Java 中的引用进行隐式引用,因此您不能为变量设置别名。

也许如果您解释您想要实现的目标,我们可以在没有“别名”的情况下帮助您做到这一点

编辑:您确实需要通过别名 int 值来解释您的意思。一个 int 值在运行时是匿名的,所以给它起别名没有任何意义。

于 2009-04-26T07:05:16.373 回答