不解为什么下面这段代码输出的是:
4:name4
4:name4
4:name4
4:name4
4:name4
为什么不是预期的:
0:name0
1:name1
2:name2
3:name3
4:name4import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String args[]){
ArrayList<Person> A=new ArrayList<Person>();
Person p=new Person();
for(int i=0;i<5;i++){
p.setId(i);
p.setName("name"+i);
A.add(p);
}
for(int i=0;i<5;i++){
System.out.println(A.get(i).getId()+":"+A.get(i).getName());
}
}
}
class Person{
public Person(){
this.setName("");
this.setId(0);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
} public void setId(int id) {
this.id = id;
} public int getId() {
return id;
} private String name;
private int id;
}
4:name4
4:name4
4:name4
4:name4
4:name4
为什么不是预期的:
0:name0
1:name1
2:name2
3:name3
4:name4import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String args[]){
ArrayList<Person> A=new ArrayList<Person>();
Person p=new Person();
for(int i=0;i<5;i++){
p.setId(i);
p.setName("name"+i);
A.add(p);
}
for(int i=0;i<5;i++){
System.out.println(A.get(i).getId()+":"+A.get(i).getName());
}
}
}
class Person{
public Person(){
this.setName("");
this.setId(0);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
} public void setId(int id) {
this.id = id;
} public int getId() {
return id;
} private String name;
private int id;
}
for(int i=0;i<5;i++){
p.setId(i);
p.setName("name"+i);
A.add(p);
}
改为 for(int i=0;i<5;i++){
Person p=new Person();
p.setId(i);
p.setName("name"+i);
A.add(p);
}
Person p=new Person();
for(int i=0;i<5;i++){
p.setId(i);
p.setName("name"+i);
A.add(p);
}
虽然经过五次赋值 但是都是针对p这一个对象的 第二次赋值覆盖了第一次赋值 以此类推 最后的结果是id = 4 name = name4
当i = 0时 id = 0;name = name0;A.get(0).getId() = 0 ;A.get(0).getName() = name0;
当i = 1时 id = 1; name = name1; A.get(0).getId() = 1 ;A.get(0).getName() = name1; A.get(1).getId() = 1 ;A.get(1).getName() = name1;
....
A 中的5个p的属性一直是保持一致的 只有分别实例化5个person对象 并分别赋值在添加到A中时 才能得到你想要的结果