java中复制对象的问题及解决办法

一.问题背景描述

在项目开发中,使用“=”符号将对象A直接复制给同类对象B,最后发现对B进行修改后,A的值也发生了改变。问题模拟如下:
在这里插入图片描述
输出的结果是:
在这里插入图片描述
结果是:使用“=”后,两个对象config和temConfig都是一样的,修改其中任意一个都会对两者造成影响。

二.问题分析

在java中因为没有指针的使用(实质上是有的,只是对用户屏蔽了),那么这种传引用调用为什么会把两者的值同时改变呢?
在这里插入图片描述 而在我们使用了“=”后,发生了两个事:1.把A的内存地址取出来;2.用这个A的地址把B的地址覆盖了
在这里插入图片描述那么此时A,B共用一个内存:“内存1”。那么无论在调用A或者B引用时,都会改变同一块内存的值,就导致了两者从同一块内存取出来的值也是相同的。

三.解决问题:复制对象

在java中,对象的复制其实应该按照这样来理解:两个对象,分别占用不同内存块,完成母本对象中与目标对象中相同属性的值的复制。
java现成的包是org.springframework.beans.BeanUtils,使用其中的copyProperties方法即可完成复制。具体如下
在这里插入图片描述结果如下:
在这里插入图片描述
测试表明,我们的复制得到了实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值