我最近搬到了Java,但是我遇到了一些变量别名问题。我到处搜索,但我似乎无法找到将一个对象的内容复制到另一个对象而不仅仅引用同一个对象的正确方法。有没有人有任何建议?
编辑:如果是一个int我会遇到别名问题怎么办?我应该首先避免这样的情况吗?如果是这样,怎么样?
答案 0 :(得分:10)
如果您的类实现了Clonable接口,那么您可以使用Object.clone()方法创建硬拷贝。 Wikipedia条目有一些很好的细节。
另一种方法是使用copy constructors,根据this page更安全。
答案 1 :(得分:4)
这取决于“内容”。例如,您不能只复制FileInputStream,然后假设两者都将从同一文件继续加载。
基本上,有两种方法:如果类支持“Cloneable”接口,则可以通过调用clone()来克隆它。如果没有,它通常有一个复制构造函数,它复制来自另一个对象的数据。
通常,您最终会得到一个浅层副本(即类的所有字段都被复制,但它们指向同一个对象)。
另一方面,许多对象被设计为不可变的(如String类),并且无需复制这样的对象,因为它无论如何都无法更改。
答案 2 :(得分:2)
另一个选择是设计你的类来创建不可变对象:
http://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html
这避免了克隆或复制构造函数的需要,因为一旦创建对象就无法更改。因此,多个变量可以指向同一个对象,但它们都不能改变对象的状态。
答案 3 :(得分:1)
java.lang.Cloneable就是你要找的。 p>
答案 4 :(得分:1)
您不能在Java中隐式引用引用,因此您不能为变量添加别名。
也许如果你解释一下你想要实现的目标,我们可以在没有“别名”的情况下帮助你做到这一点
编辑:你真的需要通过别名int值来解释你的意思。 int值在运行时是匿名的,因此别名它没有任何意义。