直接上代码:
public class TestArrayList {
public static void main(String[] args) {
ArrayList<Stu> list = new ArrayList<TestArrayList.Stu>();
list.add(new Stu("A"));
for (Stu stu : list) {
stu = new Stu("B");
}
for (Stu stu : list) {
System.out.println(stu.name);
}
}
static class Stu{
public String name;
public Stu(String name) {
this.name = name;
}
}
}
输出的是 A
而不是 B
我在便利的时候修改了啊,为什么还是B
------解决方案--------------------
感觉应该是foreach的时候那个stu是个类似临时指针的东西,是个引用,每次循环它就指向List中存的一个Stu。
for (Stu stu : list) {
stu = new Stu("B");
}
这样相当于把stu指向一个新的Stu,而List中的stu并没有真正改变。
for (Stu stu : list) {
stu.name = "b";
}
这样就不一样了。。。