假设我有一个名为list1的字符串的ArrayList,其中包含字符串“A”,“B”,“C”,“D”,“E”。然后,我还有另一个类型为storageUnit的ArrayList,这是我编写的一个类,称为list2。请查看下面的代码以获得更好的解释:

ArrayList<String> list1 = new ArrayList<String>();
ArrayList<storageUnit> list2 = new ArrayList<storageUnit>();

storageUnit newUnit = new storageUnit();
for (int i = 0; i < list1.size(); i++) {
    newUnit.category = list1.get(i);
    list2.add(newUnit);
}

static class storageUnit {
    String category;
    Hashtable<String, Integer> wordTable = new Hashtable<String, Integer>();
};

现在,如果我尝试打印list2中所有storageUnits的所有类别,则会得到[E,E,E,E,E]而不是[A,B,C,D,E]。谁能解释为什么会这样?

最佳答案

更改

storageUnit newUnit = new storageUnit();
for (int i = 0; i < list1.size(); i++) {
    newUnit.category = list1.get(i);
    list2.add(newUnit);
}


for (int i = 0; i < list1.size(); i++) {
    storageUnit newUnit = new storageUnit();
    newUnit.category = list1.get(i);
    list2.add(newUnit);
}

您的代码正在做的事情是创建一个对象(newUnit)并将其多次添加到列表中。每次都将覆盖其类别,因此在打印列表时,您会多次获得相同的值。

相反,您每次都需要创建一个新的newUnit对象。

09-04 16:47