用Java分配对象

时间:2011-07-10 09:50:40

标签: java object

我有这样的代码:

this.elements = elements;

elementsList的位置。是复制列表还是只是指针复制,两者都代表相同的列表?

5 个答案:

答案 0 :(得分:13)

这是另一个引用,两者都代表相同的列表。在java中,指针的概念对程序员是隐藏的。它只是处理指针的JVM。

答案 1 :(得分:5)

this.elements和elements都只是同一个列表的标识符,不会被复制

答案 2 :(得分:2)

两者都代表相同的列表,Java中的所有对象都是引用,并且这样传递,因此修改对象会通过引用进行修改。

答案 3 :(得分:0)

正如其他人所说,它只会复制参考文献。如果您希望复制实际列表,则必须调用clone()方法:

this.elements = elements.clone();

注意:这是否具有所需效果仍然取决于列表中的对象是什么,因为它们本身可能是对可变对象的引用。

答案 4 :(得分:0)

它本质上是一个“指针副本”。 Java中正确的术语是引用,而不是指针。一个重要的区别是Java引用的值不是内存地址,它直接指向JVM堆中的对象。

如果你想要一个副本,你有几个选择,但可以说最好的是:

this.elements = ImmutableList.copyOf(elements);

此技术使用Google Guava创建无法更改的列表。如果您想要一个可以修改的列表,请改为:

this.elements = Lists.newArrayList(elements);

还有“内置”clone()方法,但that has a few pitfalls to watch out for (Effective Java, 2nd ed., Item 10)