解析向集合中放相同名称的对象,但是每次对象的值不同时候,遍历集合时候的结果

来源:互联网 发布:带备案域名 编辑:程序博客网 时间:2024/05/29 17:51

先写一个对象,这里列出部分代码

package test;import java.text.SimpleDateFormat;import java.util.*;public class test{    public static void main(String[] args){        student st=new student();            List <student>list=new ArrayList<student>();            // 第一次放进去对象                st.setId("id为1");                st.setName("第一个对象");                System.out.println(st);                list.add(st);                //第2次放进去对象student str            st.setId("id为2");            st.setName("第二个对象");            list.add(st);            System.out.println(st);            student str=null;            for(int i=0;i<list.size();i++){                str=list.get(i);                System.out.println("第"+i+"次"+"==========="+str.getId()+"============"+str.getName());            }    }}

打印的结果却是“

test.student@659e0bfdtest.student@659e0bfd第0次===========id为2============第二个对象第1次===========id为2============第二个对象

为什么,分别两次将学生对象,放到集合中,但是第一次和第二次学生内容不同,但是最后遍历集合,集合里面却都是第二个学生信息呢。
难道是第二次将第一次的学生信息覆盖了吗。

在java中,讲究的指针,或者说地址。有上面可以看出,两个学生信息不同,但是其实却是相同地址的学生,只是人为的第一次放的是第一个学生的信息。第二次方的是第二个学生的信息,但是其实就是同一个学生的容器。而一个学生容器,只能放一个学生信息。

对于集合来说,第一次放的学生信息,的确是id为1的学生信息。第二次是为2的。但是当我们遍历的时候。里面确实是两条记录。
只是里面放的是两个学生容器的id。而两个学生容器id都是test.student@659e0bfd。而上面说了,一个容器,只能放一个学生信息,而学生容器放的就是最后一个学生的信息。因此,打印的时候,都是第二个学生的信息。

因此 应用到项目的时候,应该在外层声明集合。在内部声明对象

    student st=null;            List <student>list=new ArrayList<student>();            for(int i=0;i<2;i++){                st=new student();                st.setId("");                list.add(st);            }

总的来说就是,向相同地址的集合里放不同地址的对象,这样的才是正确的。

0 0