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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张继鲁 中级黑马   /  2014-3-5 14:24  /  1168 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张继鲁 于 2014-3-5 14:28 编辑

运行结果为:
102
102
102

为什么是3个102,有点搞不懂,请大神们指教一下

  1. public class Test1 {
  2.                   public static void main(String args[]) {
  3.                            Data data = new Data();
  4.                            ArrayList<Data> list = new ArrayList<Data>();
  5.                    for (int i = 100; i < 103; i++) {
  6.                            data.val = i;
  7.                            list.add(data);
  8.                    }

  9.                     for (Data d : list) {
  10.                           System.out.println(d.val);
  11.                    }

  12.              }

  13.       }
  14.         

  15.     class Data {
  16.        int val;
  17.       }
复制代码






评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
你只创建了一个Data实例,添加到list里面去的都是同一个Data对象,而Data实例中的成员变量 val的值最后一次赋值是102.。。最后打印出来的,当然都是102了。。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 吴涛 于 2014-3-5 15:06 编辑

因为你只new一个Data对象,所以内存中就一个Data对象,虽然for循环了三次,每次list.add(data);这个只是在list中多了几个指向你前面new的对象的引用,内存并没有另外分配内存空间
回复 使用道具 举报

如果要100 101 102的结果 程序修改如下

  1. public class Test1 {
  2.     public static void main(String args[]) {
  3.              Data data = new Data();
  4.              ArrayList<Integer> list = new ArrayList<Integer>();
  5.      for (int i = 100; i < 103; i++) {
  6.              data.val = i;
  7.              list.add(data.val);
  8.      }

  9.       for (Integer d : list) {
  10.             System.out.println(d);
  11.      }

  12. }

  13. }


  14. class Data {
  15. int val;
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
建议楼主把Data data = new Data();放入循环中去。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马