0

在下面的代码部分,我应该有一个具有不同 xValue 的 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
}

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

4

2 回答 2

1

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

如果您不希望这种行为,则必须使用 Object.clone() 在将对象放入新集合之前制作对象的副本,或使用其他类似的复制技术。

于 2013-04-16T23:59:52.070 回答
0

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

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

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

于 2013-04-16T23:58:53.630 回答