会!
无论是通过foreach还是通过for循环遍历的时候,如果对象是通过get()方法获取的,而不是new出来的,就可以通过在循环中改变对象的属性的方式来改变List集合中该对象的属性值。因为如果不是new出来的对象,该变量中存的只是从List中传过来的一个存储真正对象的地址,并不会有这个变量自己的对象,当然也不会占用新的存储空间,当在循环中对该变量所进行的操作,都是对该变量所指向的对象进行的操作,因而会改变List集合中对应对象的属性值。
测试代码:
public class Test {
public static void main(String[] args) {
Test test = new Test();
test.test();
}
public void test() {
List<Aoo> list = new ArrayList<Aoo>();
list.add(new Aoo("aaa"));
list.add(new Aoo("bbb"));
list.add(new Aoo("ccc"));
for(Aoo a : list) {
if(a.getName().equals("bbb")) {
a.setName("111");
}
}
for(Aoo a : list) {
System.out.println("name:" + a.getName());
}
}
class Aoo{
private String name;
public Aoo(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
}
测试结果:
name:aaa
name:111
name:ccc