日期:2014-05-20  浏览次数:20730 次

ArrayList遍历时的神奇问题,求大神指点下迷津
本帖最后由 Anders_Zhuo 于 2014-04-26 20:49:38 编辑
直接上代码:


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";
}
这样就不一样了。。。