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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


3 个回复

倒序浏览
同学你好~
你现在的程序运行,做的是
  1. for (int i = 100; i < 103; i++) {
  2.             data.val = i;   // 改变同一个data对象中val属性的值
  3.             list.add(data); // 这里每次add进去的都是同一个对象,所以集合中只有一个元素
  4.         }
复制代码


如果你想做的是在for循环中添加三个元素就需要在for循环中每次循环都要创建对象,代码如下:
  1. import java.util.ArrayList;

  2. class Data {
  3.         int val;
  4. }

  5. public class Test1 {
  6.         public static void main(String args[]) {
  7.                 ArrayList<Data> list = new ArrayList<Data>();

  8.                 for (int i = 100; i < 103; i++) {
  9.                         Data data = new Data();
  10.                         data.val = i;
  11.                         list.add(data);
  12.                 }

  13.                 for (Data d : list) {
  14.                         System.out.println(d.val);
  15.                 }
  16.         }
  17. }
复制代码
回复 使用道具 举报
你这是向一个集合中添加元素,创建date对象,使用for循环添加,然后遍历集合,可以不用这么麻烦,创建类,直接一个方法既可以了
回复 使用道具 举报
输出是三个:102,因为在for循环外面创建了一个data对象,所以在list集合里面始终只添加了同一个对象,
for循环结束后,data.val==102,而且for循环改变的val值始终都是同一个对象的,所以输出的都是以最后一次改变的val
值为准。都是102;
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马