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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 人心如水 中级黑马   /  2014-7-14 10:54  /  1240 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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
分析结果:由于list中存放的是Data类型的对象,而Data中的val会指向一地址。 list中添加的Data类中的val值也会指向这个地址,经过for循环后,val的值由100->101->102,list集合里面元素是可以重复的,由于在for外我们只创建了一个对象, 所以三次存入的都是同一对象,当最后一次val赋值为102时,该对象就指向了102,list里面三次存入的同一对象都会指向同一个地址

3 个回复

倒序浏览
容器中存放的不是对象,而是对象的引用。
回复 使用道具 举报
这个肯定不行啊。简单点来看,就是你只new了一个对象,for做的每次都是改了VAL,然后加进去,我认为这样for以后list中只存了一个data对象。
回复 使用道具 举报
哦,原来是这样。哪是不是这样2楼,LZ是每次在list存了相同引用,也就是最开始的data,for只是每次改变了val的值。对吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马