我为这个而疯狂。
我想做的是从一个ArrayList中获取一个对象,修改后添加到另外3个中。
问题是当我修改其他对象时,我从 ArrayList 获得的对象也被修改了...无法弄清楚为什么,这是正常的吗?
代码如下:
final Product tmpRef = productsRef.get(i);
Product tmp = tmpRef;
tmp.setPos(products1.size());
Log.d("test2","tmpRef:"+tmpRef.getPos()+";tmp:"+tmp.getPos());
Product tmp2 = tmpRef;
tmp2.setPos(products2.size());
Log.d("test2","tmpRef:"+tmpRef.getPos()+";tmp:"+tmp.getPos()+";tmp2:"+tmp2.getPos());
Product tmp3 = tmpRef;
tmp3.setPos(products3.size());
Log.d("test2","tmpRef:"+tmpRef.getPos()+";tmp:"+tmp.getPos()+";tmp2:"+tmp2.getPos()+";tmp3:"+tmp3.getPos());
tmp.setPos(products1.size());
“pos”只是一个简单的 int,带有 getter/setter。
LogCat 输出:
03-21 09:56:14.926: D/test2(6200): tmpRef:9;tmp:9
03-21 09:56:14.926: D/test2(6200): tmpRef:7;tmp:7;tmp2:7
03-21 09:56:14.926: D/test2(6200): tmpRef:0;tmp:0;tmp2:0;tmp3:0
在@FD_、@blackbelt 和@Guidobaldo da Montefelt 的解释下,我结束了创建一个简单的新 Porduct 的构造函数,以便能够复制对象,而不仅仅是引用。谢谢大家。
最佳答案
本质上,您只是将引用存储在您的 ArrayList
中,因此您是否使用类似 Product tmp = tmpRef;
的东西并不重要。 tmp
仍然指向同一个对象,因此更改将应用于两者。
在这种情况下,final
仅表示指针一旦设置就无法更改。
只需搜索深拷贝 java 以获得可能的解决方案。
关于java - 最终引用对象被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22554417/