黑马程序员技术交流社区

标题: 帮忙看一下这个程序 [打印本页]

作者: 罗雪梅    时间: 2012-10-11 14:57
标题: 帮忙看一下这个程序
本帖最后由 罗雪梅 于 2012-10-12 17:34 编辑

public static void main(String argv[]) {
          Data data = new Data();
          ArrayList list = new ArrayList();

          for (int i=100; i<103; i++) {
            data.setVal(i);
            list.add(data);
          }

        int j = 0;
        while (j < list.size()) {
          Data tmp = (Data )list.get(j);
          System.out.println("list(" + j + ") = " + tmp.getVal());
          j++;
        }
  }


打印结果是
list(0)=102
list(1)=102
list(2)=102
分析过程:
因为list集合中存储了3个元素,这三个元素是同一个对象。
集合中存储的是对象的引用。这三个应用都指向了同一个对象。

我知道肯定不是100,101,102,但这个分析过程还是看不明白,能给说细点吗谢谢




作者: 唐增友    时间: 2012-10-11 15:06
list 中添加了 3个元素
而这3个元素指向的是同一个对象
Data data = new Data();
在循环的最后一次将 对象的值修改成了 102 而后 循环结束了
因为 list 中添加 的3个元素 指向的是同一个对象
所以
list(0)=102
list(1)=102
list(2)=102

作者: Jordon    时间: 2012-10-11 15:12
集合中存储的是对象的引用(即对象地址值)。因为list集合中存储了3个元素,这三个元素是同一个对象。即同一个对象的三个相同地址值。


作者: 杨政    时间: 2012-10-11 15:30
   
public static void main(String argv[]) {
          Data data = new Data();
          ArrayList list = new ArrayList();

          for (int i=100; i<103; i++) {
            data.setVal(i);            //循环结束时,data对象里面,val=102

            list.add(data);            //集合中存的是对象的地址值,每次存的都是data对象,所以集合里存的地址值是一样的。                    
}
        int j = 0;
        while (j < list.size()) {
          Data tmp = (Data )list.get(j);     //因为集合元素val=102,所以每次取值都是102.
          System.out.println("list(" + j + ") = " + tmp.getVal());
          j++;
        }
  }


作者: 罗雪梅    时间: 2012-10-12 17:34
杨政 发表于 2012-10-11 15:30
public static void main(String argv[]) {
          Data data = new Data();
          ArrayList  ...

:victory:谢谢




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