gpt4 book ai didi

java - ArrayList 更新不正确,最后一项覆盖了所有内容

转载 作者:行者123 更新时间:2023-11-30 03:43:04 25 4
gpt4 key购买 nike

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

我有这个代码:

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 (-)

知道为什么会发生这种情况吗?

最佳答案

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

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

bonosTemp.add(auxBono.clone());

关于java - ArrayList 更新不正确,最后一项覆盖了所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387268/

25 4 0