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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rel4x 中级黑马   /  2014-9-30 11:06  /  1727 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

     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);
                   }
             }
      }


评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

7 个回复

倒序浏览
因为你始终只new了一个Data,只是不断的把它添加到ArrayList里面而已!Data的值不断的改变,最后变成102,连着输出了三次呗。
回复 使用道具 举报
水竹 发表于 2014-9-30 11:18
因为你始终只new了一个Data,只是不断的把它添加到ArrayList里面而已!Data的值不断的改变,最后变成102, ...

进入了ArrayList里面还能改变???
回复 使用道具 举报
rel4x 发表于 2014-9-30 11:24
进入了ArrayList里面还能改变???

当然能改变,首先Data是一个类,所以是引用数据类型,所以实际存放着的是对象的地址;
这三次赋值过程中,地址虽然没有变,但是其中的内容已经变了,所以才造成了这种现象;
如果你不把val封装进Data这个类中,而是直接存放进ArrayList的话才会输出不同的内容;

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

回复 使用道具 举报
相当于这样子:



回复 使用道具 举报
第一个for中添加的都是Data对象。
我没运行代码,打印出来的应该是Data的地址值吧
回复 使用道具 举报
happyto1021 来自手机 中级黑马 2014-10-7 00:47:22
7#
不懂。。。
回复 使用道具 举报
姜浩 中级黑马 2014-10-7 00:58:45
8#

     for (int i = 100; i < 103; i++) {
                           data.val = i;
                           list.add(data);
                   }
这段代码中,显示用i的值给 data.val赋值。  data.val表示的是一个变量。所以这行代码没有错误。
导致出现问题的,是想list中添加元素,楼主代码 list.add(data);,说明的是将data这个对象添加进list中,循环三次,但是添加的都是同一个对象,所以打印的3次一定相同啊。
我没运行代码,打印出来的应该是Data的地址值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马