BeanUtils.copyProperties这个方法是深拷贝浅拷贝,还是深复制浅复制?

发布时间 2023-10-14 09:39:57作者: qd372502

1、关于BeanUtils.copyProperties方法的拷贝类型,它是浅拷贝哦。这意味着在拷贝对象时,它只会复制对象的引用而不会复制对象的内容。所以,如果原始对象中的某个属性发生改变,拷贝后的对象中的相应属性也会随之改变。当然,如果你希望进行深拷贝或深复制,需要使用其他方法来实现哦

`BeanUtils.copyProperties` 方法来自 Apache Commons BeanUtils 库,用于将一个 JavaBean 的属性值复制到另一个 JavaBean。这个方法执行的是浅拷贝(Shallow Copy)。

### 浅拷贝(Shallow Copy)

当使用 `BeanUtils.copyProperties` 方法时,基本数据类型和它们的包装类、以及不可变对象(如 String)会被复制。但如果属性是引用类型(如数组、集合或自定义对象),则只是引用地址被复制,而不会创建一个新的对象。这意味着源对象和目标对象中的这些引用类型属性实际上会指向同一个对象。

### 深拷贝(Deep Copy)与深复制(Deep Clone)

深拷贝或深复制意味着不仅复制对象本身,还会复制对象包含的引用类型属性所指向的所有对象,形成一个完全独立的对象图。

`BeanUtils.copyProperties` 不支持深拷贝。如果你需要深拷贝,你可能需要自己实现,或使用其他库如 Dozer、MapStruct 等。

简而言之,`BeanUtils.copyProperties` 是浅拷贝。