黑马程序员技术交流社区

标题: 求帮助,代码的的结果怎么是这样 [打印本页]

作者: 人心如水    时间: 2014-7-13 13:38
标题: 求帮助,代码的的结果怎么是这样
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);
                   }
             }
      }
作者: SLJ_920808    时间: 2014-7-13 13:40
结果是怎样?
作者: 215041631    时间: 2014-7-13 14:09
因为你只有一个对象data, 你的容器里面存储的全是这一个对象的引用,你可以看成你一改变VAL就改变了所有VAL的值。
作者: 215041631    时间: 2014-7-13 14:13
  1. public class Test
  2. {
  3.     public static void main(String[] args)
  4.                 {
  5.                   // Data data = new Data();
  6.                            ArrayList<Data> list = new ArrayList<Data>();
  7.                    for (int i = 100; i < 103; i++) {
  8.                            
  9.                            list.add(new Data(i));
  10.                    }
  11.                     for (Data d : list) {
  12.                           System.out.println(d.val);
  13.                    }
  14.         }
  15. }
  16. class Data
  17. {
  18.         Data(int i)
  19.         {
  20.                 val = i;
  21.         }
  22.      int val;
  23. }
复制代码


OUT:
100
101
102
你应该是想要这个结果吧
作者: 人心如水    时间: 2014-7-13 14:40
215041631 发表于 2014-7-13 14:13
OUT:
100
101

求仔细分析一下开始的结果怎么都是一样,这个赋值过程脑袋一直转不过来




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