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

本文探讨了Java中对象与集合的关系,解释了为何向集合中添加同一对象的不同状态会导致最终只保留最新状态的原因,并给出了正确的实践建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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@659e0bfd
test.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);
            }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值