黑马程序员技术交流社区
标题:
向各位请教集合问题!
[打印本页]
作者:
Tyson
时间:
2014-11-19 17:48
标题:
向各位请教集合问题!
import java.util.ArrayList;
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,102,102,而不是100,101,102,!
还请各位大神指点迷津!
作者:
哈达洋
时间:
2014-11-19 18:56
list里存放的是对象的引用,你这里,自始至终都只有一个对象,所以list中的每个元素指向的都是data这个对象,你最后data对象中的val值被赋值为了102.所以最终打印的都是102.
作者:
hailong
时间:
2014-11-19 20:35
把创建对象的代码放到for循环里面就好了,每次循环创建一个对象
作者:
壹贰叁
时间:
2014-11-19 20:41
你定义的list加入了3data对象,虽然list里面存有三个对象,但list[0],list[1],list[2],里面存的都是指引向堆内存中data的内存地址,所以不管你改其中哪个的数据,另外两个也会跟着变
作者:
DamonZh
时间:
2014-11-19 20:50
你这里只有一个Data类型的对象,然后你在for中对同一个对象的val属性赋了三次值,每次赋值都会覆盖前一次的。然后你将这个对象的引用存到list中三次。集合中存的是对象的引用,而不是对象本身。所以集合中的三个引用都始终都指向的是同一个对象。所以最后打印出来的是最后一次给val赋的值,也就是102咯
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2