本帖最后由 姜浩 于 2014-11-8 10:21 编辑
- package com.itheima;
- /**
- *4、 分析运行结果,说明原理。(没有分析结果不得分)
- 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);
- }
- }
- }
- *
- * @author Administrator
- *
- */
- /*
- *
- * 运行结果:
- * 102
- * 102
- * 102
- * 分析:
- * 在下面的循环中可以看出问题,
- * for (int i = 100; i < 103; i++)
- {
- data.val = i;
- list.add(data);
- }
- * 1,在for之前已经创建了Data类的实例对象data,所以在for中的3次循环时,
- * 所用的data.val变量是同一个变量。也就是在3次重复的对data.val进行赋值。
- * 这就会导致了,前一结果被后一结果覆盖,data.val最终结果为102。
- *
- * 2,list.add(data); data代表是Data类对象的引用,因为list集合的可重复特点,
- * for循环中list 3次存储了Data类对象的引用,切存储的是同一对象。
- * 这一点可以通过:System.out.println(list);可以看出。
- *
- * 3, for (Data d : list)
- {
- System.out.println(d.val);
- }
- 这时d循环取到是同一个data对象,又因之前data.val最终赋值为102,
- 所以打印结果为102
- 102
- 102
- *
- */
- import java.util.ArrayList;
- class Data
- {
- int val;
- }
- public class Test4
- {
- 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;//102
- list.add(data);// Data类对象的引用
- }
- for (Data d : list)
- {
- System.out.println(d.val);
- }
- // System.out.println(list);
- }
- }
复制代码 大家给点意见,能不能看懂?这样作答可以吗?谢谢大家。 |
|