黑马程序员技术交流社区

标题: 一个小问题的分析,大家进来看看我分析的是不是正确的!我不太确定 [打印本页]

作者: a8851625    时间: 2014-11-13 02:24
标题: 一个小问题的分析,大家进来看看我分析的是不是正确的!我不太确定
        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);
                   }
             }
      }

这段代码运行的结果是102 102 102,三个102.
我的分析是: list.add(data);这句代码因为是给集合添加的对象,但是至始至终都只有一个对象,没有创建新的对象,所以当循环结束后   data.val的值为102,所以集合里面的对象的 val也都为102.正解么!?
作者: 爱学习的小明    时间: 2014-11-13 11:55
集合里存放的不是对象,而是对象在内存中的地址值,循环地给这个对象赋值,最终给这个对象赋的值是102,当你遍历集合时,通过集合里存放的地址值找到该对象,该对象的值是102,所以打印的是3个102
作者: MVP    时间: 2014-11-13 12:24
你的解释是对的!
作者: a8851625    时间: 2014-11-13 13:22
爱学习的小明 发表于 2014-11-13 11:55
集合里存放的不是对象,而是对象在内存中的地址值,循环地给这个对象赋值,最终给这个对象赋的值是102,当 ...

多谢纠正!!表达有误,我就说怎么念起来有点怪~谢啦
作者: 327753899    时间: 2014-11-13 14:32
你在集合中添加的是对象而不是你用for循环的数据
作者: Fightingforever    时间: 2014-11-13 15:19
爱学习的小明 发表于 2014-11-13 11:55
集合里存放的不是对象,而是对象在内存中的地址值,循环地给这个对象赋值,最终给这个对象赋的值是102,当 ...

为什么打印出来的是三个102  我认为打印出来的是1个102

作者: zhangyangLengen    时间: 2014-11-13 17:01
list集合允许元素重复
作者: a8851625    时间: 2014-11-13 17:45
Fightingforever 发表于 2014-11-13 15:19
为什么打印出来的是三个102  我认为打印出来的是1个102

添加了三次进去,肯定是三个!
作者: Fightingforever    时间: 2014-11-13 19:03
a8851625 发表于 2014-11-13 17:45
添加了三次进去,肯定是三个!

恩恩 想明白了 List中是重复有序的
作者: Fightingforever    时间: 2014-11-13 19:04
a8851625 发表于 2014-11-13 17:45
添加了三次进去,肯定是三个!

恩恩 想明白了 List中是重复有序的




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