Java 当我修改BeanUtils.CopyProperties的目标对象时,源被修改

Java 当我修改BeanUtils.CopyProperties的目标对象时,源被修改,java,list,clone,spring-framework-beans,Java,List,Clone,Spring Framework Beans,我在计算机的帮助下把一个物体复制到另一个物体上 BeanUtils.CopyProperties(Src,Dest); From : package org.springframework.beans; 现在在逻辑方面,在迭代器的帮助下,我修改Dest对象中的列表 我希望src对象保持原样 但我看到一种奇怪的行为。 我的Src也被修改了 原因可能是什么 示例: src和Dest拥有列表:[芒果,苹果] 我在iteartor的帮助下从Dest中取出了芒果。 后来我明白了 Src有[苹果]

我在计算机的帮助下把一个物体复制到另一个物体上

BeanUtils.CopyProperties(Src,Dest);

From : package org.springframework.beans;
现在在逻辑方面,在迭代器的帮助下,我修改Dest对象中的列表

我希望src对象保持原样

但我看到一种奇怪的行为。 我的Src也被修改了

原因可能是什么

示例: src和Dest拥有列表:[芒果,苹果]

我在iteartor的帮助下从Dest中取出了芒果。

后来我明白了
Src有[苹果]
目的地有[苹果]


发生这种情况是因为浅复制吗?

您不想复制
列表
字段,而是将其克隆到新复制的对象中。

BeanUtils.copyProperties(对象源、对象目标)
在其javadoc中没有明确显示,但它从一个对象到另一个对象进行了浅拷贝。

这意味着在
目标
对象中,
列表
字段将引用与
对象中的对象相同的对象。

因此,从一个或另一个对象修改
列表
字段将反映在另一个对象中。

要创建新列表,您应该创建一个新的列表实例,该实例包含源
列表中的实际元素,并将其分配给目标对象中的
列表
字段。

例如:

MyObject source = ...;
MyObject target = ...;

BeanUtils.copyProperties(source, target);
...
List<String> newList = new ArrayList<>(source.getList());
target.setList(newList);
MyObject源=。。。;
MyObject目标=。。。;
copyProperties(源、目标);
...
List newList=newarraylist(source.getList());
target.setList(newList);

“稍后我看到Src have[Mango]Dest have[Apple]”你会说“稍后我看到Src have[Apple]Dest have[Apple]”?是的,先生,我看到[Apple]对了,谢谢@davidxxx,我理解这一定是因为浅拷贝,你知道深拷贝的方法吗?欢迎:)你可以用ArrayList构造函数手动完成,如我的示例所示。我正在编辑。或者你会建议自定义方法吗?如上所述?copyProperties()相当快。如果您想避免编写一些锅炉板代码,您可以使用进行深度复制的库,但这些库在处理时间方面比较昂贵。