繁体   English   中英

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

[英]Setting a property on an object resets the same property on similar objects in an ArrayList

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM