容器放置元素(对象)后再对该元素进行操作能否改变容器中元素的值

这篇博客探讨了在Java中将对象放入Map容器后,对对象属性进行修改是否会影响容器内元素值的问题。通过示例代码展示了当修改已放入Map的Staff对象的属性后,Map中的元素值也随之改变,原因是容器存储的是对象的引用,而非对象副本。这揭示了Java中引用的本质和内存模型的工作原理。

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


代码:

       Map<String,Staff> map = new HashMap<String, Staff>();
        
        Staff staff1 = new Staff("001","zhang san");
        Staff staff2 = new Staff("002","li si");
        Staff staff3 = new Staff("003","wang mazi");
        Staff staff4 = new Staff("004","chen liu");
        Staff staff5 = new Staff("005","wang wu");
       
        map.put(staff1.getNumber(), staff1);
        map.put(staff2.getNumber(), staff2);
        map.put(staff3.getNumber(), staff3);
        map.put(staff4.getNumber(), staff4);
        map.put(staff5.getNumber(), staff5);

 

       staff1.setName("zhang san has modified");

 

       show(map);


先把生成的对象或成为元素全部放入Map容器中,然后再对其中的某一个元素进行操作,修改其属性,则结果.......?


结果:

     zhang san has modified

     li si

     wang mazi

     chen liu

     wang wu

 

原理:

容器中放置的元素,其实并非现实生活中的那样真的把元素放到容器里面去了。而是容器获得该元素的引用(指针、句柄),当用户再进行对元素操作时,是拿另外的引用去操作该元素对应的实际对象,对象只有一个!所以对象的属性值发生了改变。结果自然发生了改变。

如图所示的内存模型中,容器里面有三个元素,分别是元素1、元素2、元素3,一个句柄指向该容器,容器中近保存了元素的引用,其实是引用指向这个元素。

同时用户用另外一个句柄去修改元素1,此时用户的这个句柄完全有能力去修改这个元素。修改之后,容器仍是吃用指向元素1的引用,所以此时容器里面的元素1已经和刚开始放入时候的元素1发生了变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值