我正在开发游戏并注意到向两个arraylists添加一个对象然后更新其中一个并不会更新另一个。有可能解决这个问题吗?
我有一个列表,列出了渲染时循环的所有图块。但我还想在我的库存类中找到一个插槽列表(扩展Tile),而不是循环遍历所有游戏磁贴以获得库存插槽。
我有两个列表:Game.tiles和Inventory.slots
这是我添加插槽(库存类)的地方:
for(int i = 0; i< 16; i++){
Slot slot = new Slot();
Game.tiles.add(slot);
slots.add(slot);
}
这是我修改插槽(库存类)的地方:
for(int i = 0; i< 16; i++){
slots.get(i).visable = false;
}
问题是插槽列表中插槽的数据更新,但Game.tiles列表中的插槽没有。
完整广告资源类:http://pastebin.com/KS5BNB3F
答案 0 :(得分:1)
将对象添加到两个不同的ArrayList
时,实际上只添加了对象的引用。因此,如果您修改对象,它将同时反映在两个列表中。请参阅以下代码段:
public class Clazz{
private Integer d = 0;
public static void main(String[] args) throws Exception {
Clazz obj = new Clazz();
List<Clazz> list1 = new ArrayList<Clazz>();
List<Clazz> list2 = new ArrayList<Clazz>();
list1.add(obj);
list2.add(obj);
obj.d = 15;
System.out.println(list1.get(0).d); //prints 15
System.out.println(list2.get(0).d); //prints 15
}
}
答案 1 :(得分:-1)
创建一个对象实例,将其添加到两个数组中。那些数组将具有相同的引用。这意味着更新对象会导致在两个数组中更新它。