黑马程序员技术交流社区
标题: 帮忙分析一下,程序运行结果,并说请原理。谢谢 [打印本页]
作者: daniel031699 时间: 2016-5-23 09:05
标题: 帮忙分析一下,程序运行结果,并说请原理。谢谢
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);
}
}
}
作者: 王恩泽老师 时间: 2016-5-23 09:56
同学你好~
你现在的程序运行,做的是
- for (int i = 100; i < 103; i++) {
- data.val = i; // 改变同一个data对象中val属性的值
- list.add(data); // 这里每次add进去的都是同一个对象,所以集合中只有一个元素
- }
复制代码
如果你想做的是在for循环中添加三个元素就需要在for循环中每次循环都要创建对象,代码如下:
- import java.util.ArrayList;
- class Data {
- int val;
- }
- public class Test1 {
- public static void main(String args[]) {
- ArrayList<Data> list = new ArrayList<Data>();
- for (int i = 100; i < 103; i++) {
- Data data = new Data();
- data.val = i;
- list.add(data);
- }
- for (Data d : list) {
- System.out.println(d.val);
- }
- }
- }
复制代码
作者: TomZhou 时间: 2016-5-23 11:42
你这是向一个集合中添加元素,创建date对象,使用for循环添加,然后遍历集合,可以不用这么麻烦,创建类,直接一个方法既可以了
作者: zhoubinjian 时间: 2016-5-23 13:03
输出是三个:102,因为在for循环外面创建了一个data对象,所以在list集合里面始终只添加了同一个对象,
for循环结束后,data.val==102,而且for循环改变的val值始终都是同一个对象的,所以输出的都是以最后一次改变的val
值为准。都是102;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |