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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李能甫 中级黑马   /  2015-4-2 20:26  /  1054 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.     import java.util.ArrayList;



  2.         class Data {

  3.             int val;

  4.         }



  5.         public class Test {

  6.                   public static void main(String args[]) {

  7.                            Data data = new Data();

  8.                            ArrayList<Data> list = new ArrayList<Data>();



  9.                    for (int i = 100; i < 103; i++) {

  10.                            data.val = i;

  11.                            list.add(data);

  12.                    }



  13.                     for (Data d : list) {

  14.                           System.out.println(d.val);

  15.                    }

  16.              }

  17.       }
复制代码

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 陷阱来的!

查看全部评分

15 个回复

倒序浏览
只new了一个Data对象,你可以对集合中的三个Data判断是否==,它们都是一样的,每次都是给同一个Data对象的val赋值
回复 使用道具 举报
是不是打印100/101/102这三个数字啊
回复 使用道具 举报
你是哪里不明白呢
回复 使用道具 举报
这样做是错误的,打印的值应该是102
因为你值创建了一个对象,每次循环赋值时实质上是改变变量的值而已。
将类对象村方法到集合中应该是一个类中不同的对象才是对的
所以你每次存对象时,都应该new 然后再对new的对象赋值
之后存放到集合中
回复 使用道具 举报
  1.     import java.util.ArrayList;

  2.         class Data {
  3.             int val;
  4.         }
  5.         public class Test {

  6.                   public static void main(String args[]) {
  7.                                 //创建自定义Data类的对象
  8.                            Data data = new Data();
  9.                                 //创建ArrayList集合,指定类型为自定义的Data类类型
  10.                            ArrayList<Data> list = new ArrayList<Data>();
  11.                         //循环对Data中的变量val赋值
  12.                    for (int i = 100; i < 103; i++) {

  13.                                    data.val = i;
  14.                                 //使用ArrayList中的add方法添加数据
  15.                                    list.add(data);
  16.                    }
  17.                         //使用增强for循环对List集合输出
  18.                         for (Data d : list) {
  19.                                   System.out.println(d.val);
  20.                    }

  21.          }

  22. }
复制代码


回复 使用道具 举报
果真是陷阱,领教了,一直都是一个对象的i值在变化,因此只取了最后一个值,额,这一不小心就上当了{:2_30:}
回复 使用道具 举报
没看懂楼主你是想表达什么。
回复 使用道具 举报
头晕~~~~~~~~~~~~~~~
回复 使用道具 举报
这是在逗我么,最后输出d.val不是输出val的值么 不就是三个102?
回复 使用道具 举报
内存中只有一个Data的对象,集合中存了这个对象的引用三次,你改变了对象中的内容三次,每次改变都操作的同一个对象,后面的操作会覆盖掉前面的操作,最后又把这个对象中的值打印了三次
回复 使用道具 举报
43453186@qq.com 发表于 2015-4-2 20:39
是不是打印100/101/102这三个数字啊

打印的是三个102
回复 使用道具 举报
又注意到小细节了~长知识了
回复 使用道具 举报
看不懂。。。。。
回复 使用道具 举报
长见识了。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马