黑马程序员技术交流社区
标题:
帮我分析下结果,要每一步的过程
[打印本页]
作者:
yang649981273
时间:
2014-9-23 15:51
标题:
帮我分析下结果,要每一步的过程
package com.itheima;
/*分析运行结果,说明原理。(没有分析结果不得分)*/
import java.util.ArrayList;
class Data {
int val;
}
public class Test3 {
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);
}
}
}
复制代码
作者:
liaorubei
时间:
2014-9-23 15:52
你这个是,,,测试题目啊,看起来蛮容易的吧.
作者:
liaorubei
时间:
2014-9-23 16:15
我还是说一下吧,List集合保存的是元素的引用,而不是元素的实例,
Data data = new Data();是实例化一个Data对象,这个对象保存在堆内存中,其中字段val也保存在堆内存中和data对象同存亡
在List添加data对象之前只是修改了data对象的val字段的值,但是并没有重新实例化对象
所以在循环中List添加的都是同一个引用,
在退出第一个循环的时候,对这个对象的val字段进行了最后一次赋值为102
因为List添加的是同一个引用,所以在打印结果的时候,打印的也是同一个引用的最后一次被修改的值.
最后一次赋值的是102,所以三次打印的结果都是102
作者:
King_L
时间:
2014-9-23 16:17
只new出来了一个对象,这个对象一直指向val变量,变得只是val的值,所以结果看最后赋的值。
作者:
佟金
时间:
2015-3-15 10:01
因为只创建了一个Data对象,在for循环中,循环三次添加的都是同一个Data对象的引用。而Data中的val也是唯一的,
* 三次循环在做着覆盖的操作,val的值为最后循环i的值,为102。在增强for循环中,对集合中元素进行遍历,三次打印的是
* 同一个值102,相当于System.out.println(Data.val)语句被执行了三次
作者:
xiaoxinxin003
时间:
2015-7-17 02:43
不错不错。
作者:
千山万水
时间:
2015-8-11 09:54
嗯 学习了
作者:
TheBadboy
时间:
2015-8-20 08:34
2L总结的很全面
作者:
wyd1
时间:
2015-9-15 20:59
为什么集合中会有3个Data对象呢?如果这样说应该是只打印1个对象出来啊
作者:
兴许不接客
时间:
2015-10-15 21:53
我也有这道
作者:
背包客
时间:
2015-11-6 10:22
liaorubei 发表于 2014-9-23 16:15
我还是说一下吧,List集合保存的是元素的引用,而不是元素的实例,
Data data = new Data();是实例化一个Dat ...
学习了,。。。。。。。。。。
作者:
云在青天
时间:
2015-11-28 10:13
我的测试也是这个题
作者:
sunpeijie
时间:
2015-12-24 20:22
学到了66 6 6666
作者:
天橙星
时间:
2016-1-23 10:14
受教了谢谢QAQ
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2