我有一个项目的ArrayList。我将具有某些属性的Item添加到数组列表中。当我使用不同的属性再次将相同的项添加到数组列表时,先前添加的项的所有属性都设置为新项的属性。 例如,如果我添加汽车与柴油和轿车等属性,我再添加一个汽车与属性汽油和两厢车。
我应该看到ArrayList
这样的项目:
[0] Car(Diesel,Sedan)
[1] Car(Petrol,Hatchback)
但我看到这样:
[0] Car(Petrol,Hatchback)
[1] Car(Petrol,Hatchback)
答案 0 :(得分:1)
我知道错误是什么。实际上我正在复制最初创建的对象的引用。当我创建一个新对象时,它使用相同的引用并用新的属性覆盖它的所有属性。即使我能在列表中看到两个项目,它们实际上也会引用相同的内存。
解决方案是复制属性而不是复制整个对象
而不是做Car1 = Car2; 我应该做Car1.type = Car2.type 这里有2个独立的记忆,包含2个独立的物体。