A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

        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.正解么!?

评分

参与人数 1技术分 +1 收起 理由
MVP + 1

查看全部评分

9 个回复

倒序浏览
集合里存放的不是对象,而是对象在内存中的地址值,循环地给这个对象赋值,最终给这个对象赋的值是102,当你遍历集合时,通过集合里存放的地址值找到该对象,该对象的值是102,所以打印的是3个102

评分

参与人数 1技术分 +1 收起 理由
MVP + 1

查看全部评分

回复 使用道具 举报
MVP 中级黑马 2014-11-13 12:24:09
藤椅
你的解释是对的!
回复 使用道具 举报
爱学习的小明 发表于 2014-11-13 11:55
集合里存放的不是对象,而是对象在内存中的地址值,循环地给这个对象赋值,最终给这个对象赋的值是102,当 ...

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

为什么打印出来的是三个102  我认为打印出来的是1个102
回复 使用道具 举报
list集合允许元素重复
回复 使用道具 举报
Fightingforever 发表于 2014-11-13 15:19
为什么打印出来的是三个102  我认为打印出来的是1个102

添加了三次进去,肯定是三个!
回复 使用道具 举报
a8851625 发表于 2014-11-13 17:45
添加了三次进去,肯定是三个!

恩恩 想明白了 List中是重复有序的
回复 使用道具 举报
a8851625 发表于 2014-11-13 17:45
添加了三次进去,肯定是三个!

恩恩 想明白了 List中是重复有序的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马