我试图弄清楚这里发生了什么,并希望得到任何帮助。我有一个循环,我在其中创建新对象,然后将它们添加到 ArrayList。但似乎每次通过循环时,新对象实际上也在更改先前创建的对象。我知道 ArrayList 实际上只包含对对象的引用,但我认为每次调用 new 都会创建新实例,因此每个引用都是唯一的。
这是代码:
void copyFields()
{
String fruitStr = "apple red,banana yellow,orange orange,pear green,grape purple";
String[][] fruitArray = new String[5][];
String[] fruitPairs = fruitStr.split(",");
int r = 0;
for (String fruitPair : fruitPairs)
{
fruitArray[r++] = fruitPair.split(" ");
}
ArrayList<Fruit> fruitList = new ArrayList<Fruit>();
for (String[] f : fruitArray)
{
Fruit fruitObj = new Fruit(f[0],f[1]);
fruitList.add(fruitObj);
}
}
所以最后fruitList 包含5 个对象- 都与fruitArray 中的最后一个元素相同(葡萄紫)。
您可以看到我正在尝试从包含水果/颜色对列表的字符串到二维数组,再到水果对象的 ArrayList。我可以验证每个步骤是否正常工作,直到我在调试器中观察到填充了fruitList,每次通过for循环都会更改fruitList中的所有先前对象。
我在这里想念什么?