黑马程序员技术交流社区
标题:
代码程序问题
[打印本页]
作者:
张继鲁
时间:
2014-3-5 14:24
标题:
代码程序问题
本帖最后由 张继鲁 于 2014-3-5 14:28 编辑
运行结果为:
102
102
102
为什么是3个102,有点搞不懂,请大神们指教一下
public class Test1 {
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);
}
}
}
class Data {
int val;
}
复制代码
作者:
今生无憾
时间:
2014-3-5 14:28
你只创建了一个Data实例,添加到list里面去的都是同一个Data对象,而Data实例中的成员变量 val的值最后一次赋值是102.。。最后打印出来的,当然都是102了。。
作者:
吴涛
时间:
2014-3-5 15:04
本帖最后由 吴涛 于 2014-3-5 15:06 编辑
因为你只new一个Data对象,所以内存中就一个Data对象,虽然for循环了三次,每次list.add(data);这个只是在list中多了几个指向你前面new的对象的引用,内存并没有另外分配内存空间
作者:
osully
时间:
2014-3-5 15:17
如果要100 101 102的结果 程序修改如下
public class Test1 {
public static void main(String args[]) {
Data data = new Data();
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 100; i < 103; i++) {
data.val = i;
list.add(data.val);
}
for (Integer d : list) {
System.out.println(d);
}
}
}
class Data {
int val;
}
复制代码
作者:
wxk105
时间:
2014-3-5 15:18
建议楼主把Data data = new Data();放入循环中去。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2