黑马程序员技术交流社区

标题: 代码程序问题 [打印本页]

作者: 张继鲁    时间: 2014-3-5 14:24
标题: 代码程序问题
本帖最后由 张继鲁 于 2014-3-5 14:28 编辑

运行结果为:
102
102
102

为什么是3个102,有点搞不懂,请大神们指教一下

  1. public class Test1 {
  2.                   public static void main(String args[]) {
  3.                            Data data = new Data();
  4.                            ArrayList<Data> list = new ArrayList<Data>();
  5.                    for (int i = 100; i < 103; i++) {
  6.                            data.val = i;
  7.                            list.add(data);
  8.                    }

  9.                     for (Data d : list) {
  10.                           System.out.println(d.val);
  11.                    }

  12.              }

  13.       }
  14.         

  15.     class Data {
  16.        int val;
  17.       }
复制代码







作者: 今生无憾    时间: 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的结果 程序修改如下

  1. public class Test1 {
  2.     public static void main(String args[]) {
  3.              Data data = new Data();
  4.              ArrayList<Integer> list = new ArrayList<Integer>();
  5.      for (int i = 100; i < 103; i++) {
  6.              data.val = i;
  7.              list.add(data.val);
  8.      }

  9.       for (Integer d : list) {
  10.             System.out.println(d);
  11.      }

  12. }

  13. }


  14. class Data {
  15. int val;
  16. }
复制代码

作者: wxk105    时间: 2014-3-5 15:18
建议楼主把Data data = new Data();放入循环中去。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2