import java.util.ArrayList;
import java.util.List;
public class Test {
List<First> first ;
public List<First> getFirst() {
return first;
}
public void setFirst(List<First> first) {
this.first = first;
}
public static void main(String[] args) {
Test test = new Test();
int i = 10 , j = 8 ;
First f = new First();
List<First> list = new ArrayList<First>();
while (i>0){
f.setK(j++);
f.setI("==");
list.add(f);
i--;
}
test.setFirst(list);
for(First first : list){
System.out.println(first.getK());
}
}
}
class First {
private String i ;
private int k ;
public String getI() {
return i;
}
public void setI(String i) {
this.i = i;
}
public int getK() {[code=java]
return k;
}
public void setK(int k) {
this.k = k;
}
}[/code]
import java.util.ArrayList;
import java.util.List;
public class Test {
List<First> first ;
public List<First> getFirst() {
return first;
}
public void setFirst(List<First> first) {
this.first = first;
}
public static void main(String[] args) {
Test test = new Test();
int i = 10 , j = 8 ;
First f ;
List<First> list = new ArrayList<First>();
while (i>0){
f = new First();
f.setK(j++);
f.setI("==");
list.add(f);
i--;
}
test.setFirst(list);
for(First first : list){
System.out.println(first.getK());
}
}
}
class First {
private String i ;
private int k ;
public String getI() {
return i;
}
public void setI(String i) {
this.i = i;
}
public int getK() {
return k;
}
public void setK(int k) {
this.k = k;
}
}
这样是没有问题的。
改为
List<First> list = new ArrayList<First>();
while (i>0){第一种写法,只有一个First实例,list里存了10个这个实例的副本,当然是同一个值(为什么都是17呢?那是因为你最后一次更新的值是17,由于是同一个实例,所以每一次都把之前的给覆盖了)。
第二种些法,每一次循环都new一个First实例,list里存了10个不同的First实例,所以是不一样的结果。因为你加到list中的First对象都是同一个,每次修改也都是对同一个对象进行修改,所以最后结果都是17。刚才在论坛里还碰到一个类似的问题。