在对象上设置属性会重置ArrayList中类似对象上的相同属性

时间:2013-04-16 23:54:30

标签: java collections

在下面的代码部分中,我应该有一个具有不同xValues的Objs的ArrayList。相反,当我在第四行设置Obj n的xValue时,ArrayList中具有相同名称的所有Objs都将xValue设置为相同的值。

Obj n = new Obj();
n = getObj(event.getX(), event.getY(), view.getHeight(), view.getWidth(), view);

n.setXValue(view.getWidth());

if (currentMode == AppMode.MODE.code && n != null) {
    if (event.getAction() == MotionEvent.ACTION_MOVE) {
        arraylist.add(n);
    } // end if (event.getAction
}

我做错了什么?是否有一个集合允许我设置对象的属性而不会弄乱集合中其他对象的属性?

2 个答案:

答案 0 :(得分:1)

对象来说,Java是一种“传递参考”语言。当您将相同的Object放在两个不同的集合中时,您只是将指针传递到内存中的每个集合的相同位置,因此您从一个引用所做的任何更改都将影响另一个引用。

如果您不希望出现这种情况,则必须先使用Object.clone()复制对象,然后再将它们放入新的集合中,或者使用其他类似的复制技术。

答案 1 :(得分:0)

我猜你写了Obj,在Obj中你有一个名为XValue的静态变量。

当您将变量指定为静态时,您将获得该变量的唯一实例,并且该变量只在该类的所有实例中共享,因此:此行为。

或者,torquestomp说的是什么(他是对的)