我遇到了问题,或者我不理解代码段: 这是:
List<Person> persons = new ArrayList<>();
Person person = new Person();
person.prename = "Klaus";
for (int i = 0; i < 5; i++) {
person.surname = String.valueOf(i);
persons.add(person);
System.out.println(person.prename + ". " + person.surname);
}
System.out.println("=======");
for (Person person1 : persons) {
System.err.println(person1.prename + ". " + person1.surname);
}
结果是:
Klaus. 0
Klaus. 1
Klaus. 2
Klaus. 3
Klaus. 4
=======
Klaus. 4
Klaus. 4
Klaus. 4
Klaus. 4
Klaus. 4
为什么列表中的值会覆盖?我怎样才能阻止这样的结果呢?
答案 0 :(得分:3)
您只需要在循环内创建人物。截至目前,您正在循环之外创建。
for (int i = 0; i < 5; i++) {
Person person = new Person();
person.prename = "Klaus";
person.surname = String.valueOf(i);
persons.add(person);
System.out.println(person.prename + ". " + person.surname);
}
答案 1 :(得分:2)
每次插入相同的对象引用,然后更改内容 - 但对象引用仍然指向同一个人。解决方案:为每次迭代创建一个新对象。
for (int i = 0; i < 5; i++) {
Person person = new Person();
person.prename = "Klaus";
person.surname = String.valueOf(i);
persons.add(person)
System.out.println(person.prename + ". " + person.surname);
}
答案 2 :(得分:1)
因为您只使用了一个对象并对Object
进行了更改,所以最后一次更改只会应用于Object
Person person = new Person();//Move it inside loop
在循环内声明它以创建新的Objects
。
在循环内移动以下语句。
Person person = new Person();
person.prename = "Klaus";
顺便说一句
person.surname = String.valueOf(i);//I appreciate this rather than ""+i
答案 3 :(得分:1)
Person person = null;
for (int i = 0; i < 5; i++) {
person = new Person();
person.prename = "Klaus";
person.surname = String.valueOf(i);
persons.add(person);
System.out.println(person.prename + ". " + person.surname);
}