更奇怪的是:
for循环一个list,元素赋值给另一个对象,修改另一个对象,竟然可以修改list。
@org.junit.Test
public void testForEach() throws Exception{
List<Cookie> list = new ArrayList();
Cookie c1 = new Cookie("c1","c1");
c1.setComment("111");
c1.setDomain("111a");
Cookie c2 = new Cookie("c2","c2");
c2.setComment("222");
c2.setDomain("222a");
list.add(c1);
list.add(c2);
for (Cookie c: list) {
Cookie c11 = c;
c11.setComment("aaaaaa");
}
for (Cookie c: list) {
System.out.println(c.getComment() + " "+c.getDomain());
}
}
原因不是出在for的特殊功能,而是在于,对象1=对象2是假的对象复制(即对象克隆),给对象1=对象2,则这两个对象操作的就是一个数据块。