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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗雪梅 中级黑马   /  2012-10-11 14:57  /  1244 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗雪梅 于 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,但这个分析过程还是看不明白,能给说细点吗谢谢



评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
list 中添加了 3个元素
而这3个元素指向的是同一个对象
Data data = new Data();
在循环的最后一次将 对象的值修改成了 102 而后 循环结束了
因为 list 中添加 的3个元素 指向的是同一个对象
所以
list(0)=102
list(1)=102
list(2)=102

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
集合中存储的是对象的引用(即对象地址值)。因为list集合中存储了3个元素,这三个元素是同一个对象。即同一个对象的三个相同地址值。

回复 使用道具 举报
   
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++;
        }
  }

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
杨政 发表于 2012-10-11 15:30
public static void main(String argv[]) {
          Data data = new Data();
          ArrayList  ...

:victory:谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马