一.问题背景描述
在项目开发中,使用“=”符号将对象A直接复制给同类对象B,最后发现对B进行修改后,A的值也发生了改变。问题模拟如下:
输出的结果是:
结果是:使用“=”后,两个对象config和temConfig都是一样的,修改其中任意一个都会对两者造成影响。
二.问题分析
在java中因为没有指针的使用(实质上是有的,只是对用户屏蔽了),那么这种传引用调用为什么会把两者的值同时改变呢?
而在我们使用了“=”后,发生了两个事:1.把A的内存地址取出来;2.用这个A的地址把B的地址覆盖了
那么此时A,B共用一个内存:“内存1”。那么无论在调用A或者B引用时,都会改变同一块内存的值,就导致了两者从同一块内存取出来的值也是相同的。
三.解决问题:复制对象
在java中,对象的复制其实应该按照这样来理解:两个对象,分别占用不同内存块,完成母本对象中与目标对象中相同属性的值的复制。
java现成的包是org.springframework.beans.BeanUtils,使用其中的copyProperties方法即可完成复制。具体如下
结果如下:
测试表明,我们的复制得到了实现。