在Java中分配对象

在Java中分配对象,java,object,Java,Object,我有这样的代码: this.elements = elements; 其中元素是一个列表。列表是复制的还是指针复制的,两者都表示相同的列表?这是另一个引用,两者都表示相同的列表。在java中,指针的概念对程序员来说是隐藏的。只有JVM处理指针。两者都表示相同的列表,Java中的所有对象都是引用,因此通过引用修改对象。这两者都是。元素和元素只是同一列表的标识符,不会像其他人所说的那样被复制,它将只复制引用。如果要复制实际列表,必须调用clone()方法: this.elements = elem

我有这样的代码:

this.elements = elements;

其中
元素
是一个
列表
。列表是复制的还是指针复制的,两者都表示相同的列表?

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

两者都表示相同的列表,Java中的所有对象都是引用,因此通过引用修改对象。

这两者都是。元素和元素只是同一列表的标识符,不会像其他人所说的那样被复制,它将只复制引用。如果要复制实际列表,必须调用
clone()
方法:

this.elements = elements.clone();
注意:这是否具有预期的效果仍然取决于列表中的对象是什么,因为它们本身可能是对可变对象的引用。

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

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

this.elements = ImmutableList.copyOf(elements);
此技术用于创建无法更改的列表。如果需要可以修改的列表,请改为:

this.elements = Lists.newArrayList(elements);
还有“内置的”
clone()
方法,但是