黑马程序员技术交流社区

标题: 帮忙分析一下,程序运行结果,并说请原理。谢谢 [打印本页]

作者: 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
同学你好~
你现在的程序运行,做的是
  1. for (int i = 100; i < 103; i++) {
  2.             data.val = i;   // 改变同一个data对象中val属性的值
  3.             list.add(data); // 这里每次add进去的都是同一个对象,所以集合中只有一个元素
  4.         }
复制代码


如果你想做的是在for循环中添加三个元素就需要在for循环中每次循环都要创建对象,代码如下:
  1. import java.util.ArrayList;

  2. class Data {
  3.         int val;
  4. }

  5. public class Test1 {
  6.         public static void main(String args[]) {
  7.                 ArrayList<Data> list = new ArrayList<Data>();

  8.                 for (int i = 100; i < 103; i++) {
  9.                         Data data = new Data();
  10.                         data.val = i;
  11.                         list.add(data);
  12.                 }

  13.                 for (Data d : list) {
  14.                         System.out.println(d.val);
  15.                 }
  16.         }
  17. }
复制代码

作者: 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