## 浅拷贝 / 属性映射
`subtractedArray = Arrays.copyOf(sellPriceArr, sellPriceArr.length);`
浅拷贝的场景有啥?
当我们开启阿里代码扫描®插件时,如果你使用了 Apache BeanUtils。copyProperties 进行属性拷贝,它会给你一个非常严重的警告。因为,Apache BeanUtils 性能较差,可以使用 Spring BeanUtils 或者Cglib BeanCopier 来代替。
po - dto - vo的转换就是浅拷贝,可以用mapstruct、cglib copy
| 特性 | Apache BeanUtils | Spring BeanUtils | Cglib BeanCopier |
| ---- | ---------------- | ---------------- | ---------------- |
| 性能 | 较差 | 较好 | 最佳 |
| 实现方式 | 过度使用反射 | 反射 | 动态字节码生成 |
| 缓存机制 | 没有用缓存提高性能 | 有 | 有 |
| 类型转换 | 支持 | 有限支持 | 不支持 |
| 使用难度 | 简单 | 简单 | 相对复杂 |
| 灵活性 | 高 | 中 | 低 |
| 用哪个?| | ✅平衡了性能和易用性 | |

## 深拷贝
https://www.cnblogs.com/jingzh/p/16700921.html
实现深拷贝有几种方法?
1.递归重写clone方法
需要递归地将整个Object Tree的所有类implements Cloneable, 用深拷贝的方式重写clone()方法
effective java不建议用clone
直接调super.clone(),只能完成浅拷贝。
要想深拷贝需要自己补充实现,但是这样的话递归关系嵌在了object tree上的每个clone方法里,容易受到final等修饰符的影响。自己实现每个地方的
2.先序列化再反序列化
3.享元模式,如果不可变的fields比较多,可以先浅拷贝,再将其中可变的部分深拷贝
写一个拷贝构造器或者写一个拷贝工厂
public MyClass(MyClass other)自己实现方法,对于不可变对象或原始类型,直接浅拷贝即可;对于可变对象或数组,可能需要递归复制每个元素或子对象。