ArrayList被错误更新,用最后一项覆盖全部

时间:2014-10-15 16:14:59

标签: java arraylist duplicates

首先,我一直在阅读以避免可能的重复,我不得不说这似乎不是任何静态声明问题。

我有这段代码:

String[] bonoActual = (String[]) it.next();
String[] auxBono = new String[3];
ArrayList<String[]> bonosTemp = new ArrayList<String[]>();
ArrayList<Integer> abosTemp = new ArrayList<Integer>();


System.out.println("Añadiendo: "+bonoActual[0] + "a bonostemp");
bonosTemp.add(bonoActual);

abosTemp.add(abo);
auxBono[0] = aux;
auxBono[1] = String.valueOf(udsPrecio[1]);
auxBono[2] = fecValor;
bonosTemp.add(auxBono);
abosTemp.add(abo);
System.out.println("Añadido: "+auxBono[0] + "a bonostemp");

aux,abo和fecValor的值正确地从其他来源分配,bonoActual正在循环中初始化并从其他来源检索,这是控制台输出:

Añadiendo: BONO DATOS 1 GIGA AGOSTO (-) BONO VOZ 100 MINUTOS AGOSTO (-)a bonostemp
Añadido: BONO DATOS 1 GIGA SEPTIEMBRE (-)a bonostemp

这是正确的,但是当我在调试时查看bonosTemp时,两个条目都在数组值的位置0中具有此值:

 BONO DATOS 1 GIGA SEPTIEMBRE (-)

为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:2)

您正在重复向bonosTemp添加相同的数组。因此,bonosTemp的每个元素都指向同一个数组。修改数组时,所有元素bonosTemp似乎都会立即更改(因为它们是同一个对象)。

要解决此问题,请改为添加数组的副本

bonosTemp.add(auxBono.clone());