首先,我一直在阅读以避免可能的重复,我不得不说这似乎不是任何静态声明问题。
我有这段代码:
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 (-)
为什么会发生这种情况的任何想法?
答案 0 :(得分:2)
您正在重复向bonosTemp
添加相同的数组。因此,bonosTemp
的每个元素都指向同一个数组。修改数组时,所有元素bonosTemp
似乎都会立即更改(因为它们是同一个对象)。
要解决此问题,请改为添加数组的副本:
bonosTemp.add(auxBono.clone());