黑马程序员技术交流社区
标题:
执行ListTest.main的结果是什么?(此题需写出分析过程)
[打印本页]
作者:
せR3n、何必装纯
时间:
2011-11-22 14:43
标题:
执行ListTest.main的结果是什么?(此题需写出分析过程)
lass Data {
int val;
int getVal() {
return val;
}
void setVal(int val) {
this.val = val;
}
}
public class ListTest {
public static void main(String argv[]) {
Data data = new Data();
ArrayList list = new ArrayList();
for (int i=100; i<103; i++) {
data.setVal(i);
list.add(data);
}
int j = 0;
while (j < list.size()) {
Data tmp = (Data )list.get(j);
System.out.println("list(" + j + ") = " + tmp.getVal());
j++;
}
}
}
作者:
tintick
时间:
2011-11-22 15:32
这里list集合里面装入的都是
同一个对象
!每次循环都回重新设置 i 的值,于是data中 i 的值在变。由于list集合是有序的,因此允许加入多次同一个对象。
作者:
tintick
时间:
2011-11-22 15:37
改用hashset存储的话效果就很明显了 只能打印出一个值。
作者:
冯敏
时间:
2011-11-22 16:17
输出结果为:
list(0) = 102
list(1) = 102
list(2) = 102
我想这不是你想要的结果吧,先分析一下再说,
首先实例化一个Data和list的对象,然后执行for循环,
i=100时,把Data中的vail属性值赋为100,把Data类对象放入list,
i=101时,把Data中的vail属性值赋为101,把Data类对象放入list,
i=102时,把Data中的vail属性值赋为102,把Data类对象放入list,
那么循环三次都是把同一对象放入了ArrayList里面,所以会出现上面的结果,如果想要存放100、101、103在for循环内实例化Data对象就好啦,代码如下:
Data data = null;
ArrayList list = new ArrayList();
for (int i=100; i<103; i++) {
data = new Data();
data.setVal(i);
list.add(data);
}
作者:
宿万涛
时间:
2011-11-22 17:17
输出结果:
list(0) = 102
list(1) = 102
list(2) = 102
你在这行代码前面加个断点 Data tmp = (Data )list.get(j);
debug后,你会发现,temp的值一直没变。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2