标题: 终于搞懂了,就是转不过来 [打印本页] 作者: 人心如水 时间: 2014-7-14 10:54 标题: 终于搞懂了,就是转不过来 class Data {
int val;
}
public class Test {
public static void main(String args[]) {
Data data = new Data();
ArrayList<Data> list = new ArrayList<Data>();
for (int i = 100; i < 103; i++) {
data.val = i;
list.add(data);
}
for (Data d : list) {
System.out.println(d.val);
}
}
}输出三次都是102
分析结果:由于list中存放的是Data类型的对象,而Data中的val会指向一地址。 list中添加的Data类中的val值也会指向这个地址,经过for循环后,val的值由100->101->102,list集合里面元素是可以重复的,由于在for外我们只创建了一个对象, 所以三次存入的都是同一对象,当最后一次val赋值为102时,该对象就指向了102,list里面三次存入的同一对象都会指向同一个地址作者: fantacyleo 时间: 2014-7-14 11:06
容器中存放的不是对象,而是对象的引用。作者: IT初学者 时间: 2014-7-14 11:07
这个肯定不行啊。简单点来看,就是你只new了一个对象,for做的每次都是改了VAL,然后加进去,我认为这样for以后list中只存了一个data对象。作者: IT初学者 时间: 2014-7-14 11:56
哦,原来是这样。哪是不是这样2楼,LZ是每次在list存了相同引用,也就是最开始的data,for只是每次改变了val的值。对吗?