一般出现这种情况是在list存储对象的时候,比如说下面的代码会输出10个9。
因为对象Number实例话一次,也就是说堆中只创建了一个对象,在最后一次循环的时候n.setA(i)将对象number中的属性a修改为9,此时ns中的前9个对象(其实在堆中就是一个对象n)中的 a 也就变成了9。解决方法就是在每次add之后将对象初始化new,这样就是创建了多个对象,每个对象之间不会互相影响。
class Number{
private int a ;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
public class Test_4 {
public static void main(String[] args) throws InterruptedException {
List<Number> ns = new ArrayList<>();
Number n = new Number();
for(int i=0;i<10;i++) {
n.setA(i);
ns.add(n);
}
for(Number u:ns) {
System.out.println(u.getA());
}
}
}