假设我有一个名为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
对象。