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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王廷顺 中级黑马   /  2013-7-19 20:48  /  1653 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王廷顺 于 2013-7-19 22:47 编辑

为什么会出现3个结果。代码如下
import java.util.ArrayList;

        class Person {
            int val;
        }

        public class Test3 {
                  public static void main(String args[]) {
                           Person p = new Person();
                      ArrayList<Person> list = new ArrayList<Person>();
                    
                   for (int i = 80; i < 83; i++) {
                           
                                 p.val = i;
                           
                           list.add(p);  
                          
                   }
                  
                    for (Person d : list) {
                           
                          System.out.println(p.val);
                        
                   }
                    
             }
        }

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

3 个回复

倒序浏览
在list中存放的是对象的指针,你的程序中每次存入的对象都是跟着p的指针改变而改变,是因为你对象的初始化在for循环外部造成的,在者你程序中最后一个循环有错误,对象定义为d,输出时却用p对象,下面是我给你修改以后的代码,希望你能明白
  1. package test;

  2. import java.util.ArrayList;

  3.         class Person {
  4.             int val;
  5.         }

  6.         public class Test3 {
  7.                   public static void main(String args[]) {
  8.                            Person p = null;
  9.                       ArrayList<Person> list = new ArrayList<Person>();
  10.                     
  11.                    for (int i = 80; i < 83; i++) {
  12.                               p = new Person();
  13.                               p.val = i;
  14.                            
  15.                              list.add(p);  
  16.                           
  17.                    }
  18.                   
  19.                     for (Person p1 : list) {
  20.                            
  21.                           System.out.println(p1.val);
  22.                         
  23.                    }
  24.                     
  25.              }
  26.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先你的代码只有一个person对象,for循环只是给同一个person对象的val多次赋值,并再次添加到list中,因此list中存放的其实是同一个对象,那么增强for遍历出来的对象是同一个,val属性也应该相同
另外遍历得到的应该是Object对象,应该要加强转哈

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
周之浩 发表于 2013-7-19 21:15
在list中存放的是对象的指针,你的程序中每次存入的对象都是跟着p的指针改变而改变,是因为你对象的初始化 ...

哦 明白了 你说的很对,非常感谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马