黑马程序员技术交流社区

标题: 一个结果的困惑。 [打印本页]

作者: 王廷顺    时间: 2013-7-19 20:48
标题: 一个结果的困惑。
本帖最后由 王廷顺 于 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);
                        
                   }
                    
             }
        }

作者: 周之浩    时间: 2013-7-19 21:15
在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.         }
复制代码

作者: 刘张朋    时间: 2013-7-19 22:31
首先你的代码只有一个person对象,for循环只是给同一个person对象的val多次赋值,并再次添加到list中,因此list中存放的其实是同一个对象,那么增强for遍历出来的对象是同一个,val属性也应该相同
另外遍历得到的应该是Object对象,应该要加强转哈
作者: 王廷顺    时间: 2013-7-19 22:47
周之浩 发表于 2013-7-19 21:15
在list中存放的是对象的指针,你的程序中每次存入的对象都是跟着p的指针改变而改变,是因为你对象的初始化 ...

哦 明白了 你说的很对,非常感谢。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2