我无法理解为什么我的代码会出现这样的行为。我所做的是创建自定义类的 ArrayList。填充类对象,然后将其添加到 ArrayList。然后,我重用该类对象并用新值填充它,并将其添加到 ArrayList 中,除非第一个被第二个覆盖?是否存在某种内部指针或数组列表尚未提交可能导致此问题?
在这里我声明我的ArrayList
private ArrayList<LiftData> arrylst_LiftData = new ArrayList<LiftData>();
然后我创建自定义数据对象(只是一个具有一些属性的类)
LiftData obj_LData = new LiftData();
一些未显示的代码用有效数据填充它,并将其添加到 ArrayList
arrylst_LiftData.add(obj_LData);
现在,代码将完成循环,用新值填充 obj_LData,然后将其添加到数组列表中,但第一个已经消失了???
如果我添加 ArrayList 下显示的第二行,则一切正常???
arrylst_LiftData.add(obj_LData);
obj_LData = new LiftData();
有人可以告诉我发生了什么吗?
最佳答案
ArrayList 与所有 Java 集合(实际上是 Java 中的所有变量)一样,包含对对象的引用,而不是对象本身。听起来您好像只创建了一个 LiftData
对象,并用对其的多个引用填充 ArrayList
。每次更改数据时,ArrayList
中的每个对象都会更改 - 因为它们都是同一个对象。
这与在 C++ 中使用基本相同的语法所得到的结果相反;插入到 vector
中将创建该对象的副本,您确实可以修改该对象,重新添加它,并在 vector
中获取两个不同的对象。但 Java 并不是这样工作的:所有对象类型的变量本质上都是指针。
在填充列表的循环中,您每次都需要创建一个新的 LiftData
对象。
关于java - 填充 ArrayList 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10623235/